목록Python (281)
jyamethyst21 님의 블로그
문제: 문제 이해는 어렵지 않다. 사용자로부터 입력을 받고 해당 입력값을 오름차순으로 정렬한 것을 한줄씩 출력해주면 된다. 풀이:N = int(input())li = []for i in range(N): li.append(int(input()))sort = sorted(li)for i in sort: print(i)첫 시도의 코드이다. '왜 이게 높은 단계의 문제이지? 어제 푼 문제랑 다를 바 없는데?' 라고 생각했는데 역시 호락호락하지 않다.이렇게 풀면 메모리초과 에러가 뜬다. 메모리 제한은 8MB인데 O(n)만큼의 복잡도를 가지고 있고 수를 많이 받고 있다. 또한 for문에서 append를 쓰면 메모리 재할당 문제가 있어 메모리초과가 일어난다고 한다.import sysN = int(inpu..
문제: 문제는 다음과 같다. 커트라인이라는 말을 생각해보면 문제를 이해하는데에는 어려움이 없을 것이다. 사용자로부터 입력횟수와 상을 줄 인원 수를 입력받고, 점수대로 정렬 시킨 뒤에 상을 받을 인원수 중 가장 작은 값을 출력하면 된다. 풀이:N, k = map(int,input().split())li = list(map(int,input().split()))won = []q = sorted(li, reverse=True)for i in q: if i>=q[k-1]: won.append(i)print(min(won))찾아보면 분명 더 간단하게 풀 수 있을 것 같은데 최대한 이해하기 위해 길게 풀어서 썼다.입력받은 수를 li라는 리스트에 넣고 이를 내림차순으로 정렬한다. 그 후 정렬된 리스..
문제: 오늘 문제는 딱히 설명할 게 없다. 입력을 몇번 받을지도 알려줬고 그 값들의 평균과 중앙값을 출력하면 되기 때문이다.5번 입력에선 세번째에 위치해있는 값이 중앙값이기 때문에 정렬 후 이를 출력하도록 코딩하면 된다! 풀이:k=[]for i in range(5): a = int(input()) k.append(a)an = sorted(k)print(int(sum(an) / 5))print(an[2])입력 받은 수를 리스트에 넣고 파이썬 내에 정렬함수인 sorted를 활용하여 정렬해준다.그 이후 정렬된 값에서 중앙값은 무조건 [2] 인덱스에 위치해있는 수이기 때문에 이를 출력하면 중앙값은 해결된다.그 앞에는 평균도 출력하라고 했기 때문에 sum 함수를 활용하여 전체를 더하고 5로 나눠주어 평..
문제: 문제를 이해하는데는 어렵지 않았다.설명 그대로 영식 요금제는 1초부터 29초까지 10원, 30초부터 59초까지 20원.. 이런식으로 요금이 들고,민식 요금제는 1초부터 59초까지 15원, 60초부터 119초까지는 30원... 이런식으로 요금이 드니까 동호가 쓴 시간만큼을 기준으로 두 요금제를 비교해서 싼 요금제를 출력하라는 문제이다. 풀이:n = int(input())a = list(map(int,input().split()))result1=[]result2=[]for j in a: result1.append((j // 30 + 1) * 10) result2.append((j // 60 + 1) * 15)if sum(result1) > sum(result2): print(f"M {..
문제:오늘 문제는 정렬과 관련된 문제이다.상기 이미지대로, 무작위 입력을 받은 후 값끼리 수를 비교하여 오름차순으로 정렬하면 된다. 풀이:n = int(input())k=[]for i in range(n): a=int(input()) k.append(a)for j in range(n): for q in range(j+1,n): if k[j]>k[q]: k[j],k[q]=k[q],k[j]for q in k: print(q)코드를 만드는데는 시간이 좀 걸릴 수 있지만, 코드를 보면 어떤 걸 하려고 하는지 이해할 수 있을 것이다.사용자로부터 반복할 횟수를 입력받고 해당 수만큼 숫자를 입력받은 뒤 k라는 리스트에 저장한다.이후 for문 두개를 통해 0번째 인..
문제: 오늘은 좀 쉬어가는 문제로 들고왔다. 하지만 해당 라이브러리를 모르면 풀 수가 없어 덕분에 라이브러리의 존재와 어떻게 사용하는지 배울 수 있었다. 문제는 상기 이미지 그대로 서울의 오늘 날짜를 출력하면 되는 문제이다. 풀이:from datetime import datetime, timedeltatoday = datetime.utcnow() + timedelta(hours=9)print(today.strftime("%Y-%m-%d"))문제에서 datetime, timedelta를 import 해야하는데, 각 역할은 다음과 같다. datetime: 날짜를 출력할 수 있게 도와주는 역할timedelta: 두 날짜나 시간의 간격을 나타내는 역할 문제에서 주의할 점은 서버 기준이 utc+0 이라는 점이다...
문제:해당 문제는 어제에 이어 시간복잡도와 관련된 문제이다. 이번엔 흔한 규칙이 아니라 직접 규칙을 찾아 수행 횟수를 출력해야했다.몇십분간 이 문제를 붙잡으면서 규칙을 찾으려고 했는데, 너무 오래 걸려서 구글링의 도움을 받아 규칙을 찾아냈다. 참고한 글을 다음과 같다. 출처: https://velog.io/@jiiina/%EB%B0%B1%EC%A4%80-24267%EB%B2%88-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%88%98%ED%96%89-%EC%8B%9C%EA%B0%84-Java [백준] 24267번 - 알고리즘 수행 시간 (Java)문제 문제 링크 풀이 방법 1 3차항의 시간복잡도인 것은 명백하니 일단 n(n-1)(n-2)로 잡고, 예제 출력에 맞추어 6을 나누..
문제: 어제 시간복잡도 문제가 어렵게 나와서 오늘도 어렵겠거니 생각하고 들어갔는데, 오늘은 쉬웠다! 그저께 푼 문제와 비슷하다. 문제를 살펴보면 for문이 총 3개이고 각 for문당 1부터 n까지 반복되고 있다. 그리고 이를 곱한 값을 출력한다.해당 문제는 단순하게 for문을 반복하고 있고, for문 3개가 1에서 n까지 실행되므로 이는 n^3번 실행된다. 당연히 최고차항은 3이 될 것이다. 풀이:n=int(input())print(n**3)print(3)문제 파트에서 설명한 부분을 코드로 만들면 상기와 같다.역시 간단하다.
문제: 금주에 풀었던 시간복잡도 문제 중 가장 난이도가 높았다. 기존에는 어떻게 보면, 공식 아닌 공식으로 바로 풀 수 있었기 때문에 쉬웠는데 해당 문제는 공식에 있는 문제가 아니기 때문에 좀 더 깊이 생각해야하는 문제였다. 풀이:MenOfPassion(A[], n) { sum 문제의 코드를 다시 들고와보겠다. 바깥 for문은 1부터 n-1까지 반복되고 안쪽 for문은 i+1부터 n까지 반복된다. 예제를 들어서 좀 더 쉽게 설명해보겠다. n이 예제와 같이 7일 경우, i가 1일 때 j는 2~7까지 반복 (6번)i가 2일 때 j는 3~7까지 반복 (5번)i가 3일 때 j는 4~7까지 반복 (4번)i가 4일 때 j는 5~7까지 반복 (3번)i가 5일 때 j는 6~7까지 반복 (2번)i가 6일 때 j는..
문제: 해당 문제도 어제와 같이 간단한 문제이다. 단계가 올라가서 어려울 줄 알았는데 아직은 쉽게 나오고 있다!이번엔 for문이 2개 있다. 어제와 그저께 올려놓은 게시물을 보면 시간복잡도에 대해 설명해놓은 게 있다. 그 설명의 패턴을 살펴보면 위 코드는 'O(n^2)'의 시간복잡도를 갖는다는 것을 알 수 있다. 풀이:n=int(input())print(n**2)print(2)'O(n^2)'의 시간복잡도를 표현하기 위해, 사용자로부터 입력값을 받은 뒤 그 값을 제곱한 값을 출력하고 n^2이므로 최고차항은 2가 될테니 이를 같이 출력해주면 문제는 쉽게 풀 수 있다.
