핵심 포인트 정렬 알고리즘 제출코드 N, k = map(int, input().split()) numbers = list(map(int, input().split())) for i in range(1, N): key = numbers[i] for j in range(i-1, -1, -1): if numbers[j] > key: numbers[j+1] = numbers[j] else: j += 1 break numbers[j] = key print(numbers[-k]) 해설 지난 포스팅의 BOJ 2750번: 수 정렬하기의 삽입정렬을 그대로 이용하여 문제를 풀 수 있습니다. 삽입정렬에 대한 자세한 알고리즘은 지난 포스팅을 참고해주시길 바랍니다. 여기서 주의할 점은 오름차순으로 정렬되어 있기 때문에 큰 숫자..
핵심 포인트 정렬 알고리즘 중앙값의 정의 제출코드 numbers = [int(input()) for _ in range(5)] for i in range(1, 5): key = numbers[i] for j in range(i-1, -1, -1): if numbers[j] > key: numbers[j+1] = numbers[j] else: j += 1 break numbers[j] = key print(int(sum(numbers)/5)) print(numbers[2]) 해설 지난 포스팅의 BOJ 2750번: 수 정렬하기의 삽입정렬을 그대로 이용하여 문제를 풀 수 있습니다. 삽입정렬에 대한 자세한 알고리즘은 지난 포스팅을 참고해주시길 바랍니다. 문제에서 항상 5개의 숫자만 입력되기 때문에 중앙값은 정렬..
핵심 포인트 정렬 알고리즘 (삽입정렬과 거품정렬) 제출코드 (삽입정렬) N = int(input()) numbers = [int(input()) for _ in range(N)] for i in range(1, N): key = numbers[i] for j in range(i-1, -1, -1): if numbers[j] > key: numbers[j+1] = numbers[j] else: j += 1 break numbers[j] = key print(*numbers, sep='\n') 제출코드 (거품정렬) N = int(input()) numbers = [int(input()) for _ in range(N)] for i in range(0, len(numbers)): for j in range(0..
핵심 포인트 브루트포스 제출코드 N = int(input()) cnt = 0 number = 666 while cnt != N: if '666' in str(number): cnt += 1 number += 1 print(number - 1) 해설 오늘은 브루트포스 문제 입니다. 브루트포스에 대한 자세한 설명은 지난 포스팅의 BOJ 2798번: 블랙잭을 참고해주시길 바랍니다. 문제를 보면 666이라는 숫자만 들어가면 종말의 수라고 판단되기 때문에 666부터 시작해서 숫자를 1씩 올리면서 666이 포함되어 있으면 cnt를 1 증가시키고 아니면 증가시키지않는 방식으로 전수탐색을 진행하면 됩니다. 코딩을 편하게 하기 위해 현재 숫자를 문자열로 바꾼 뒤 in 함수를 사용해서 해당 '666' 문자열이 현재 숫자에..
핵심 포인트 브루트포스 제출코드 a, b, c, d, e, f = map(int, input().split()) flag = 0 for x in range(-999, 1000): for y in range(-999, 1000): if a * x + b * y == c and d * x + e * y == f: print(x, y) flag = 1 break if flag: break 해설 오늘은 브루트포스 문제 입니다. 브루트포스에 대한 자세한 설명은 지난 포스팅의 BOJ 2798번: 블랙잭을 참고해주시길 바랍니다. 브루트포스의 기본은 저희가 답을 탐색할 범위를 정하는 것 입니다. 문제를 보면 연립방정식의 계수가 주어집니다. 그리고 해가 유일하다는 점과 해의 범위가 -999 ~ 999로 한정되어있다는 점..
핵심 포인트 시간 복잡도 제출코드 a0, a1 = map(int, input().split()) c = int(input()) n0 = int(input()) flag = 1 for i in range(n0, 100): if a0 * i + a1 > c * i: flag = 0 break print(flag) 해설 다항식 $f(n)$의 계수인 $a_{0}$와 $a_{1}$ 그리고 상수 $c$와 $n_{0}$를 먼저 입력받습니다. 이 문제에서 확인해야할 것은 $n \ge n_{0}$에 대한 모든 $n$에 대해서 $f(n) \le c \times n$을 만족하는 지 확인해야합니다. 다만, 저희가 무한대의 수를 검증할 수는 없기 때문에 제한을 두어서 $n_{0}$부터 100까지 숫자에 대해서만 확인합니다. 이..
핵심 포인트 시간 복잡도 제출코드 n = int(input()) ans = 0 for i in range(1, n - 1): ans += (n - (i + 1)) * (n - i) // 2 print(ans) print(3) 해설 이 문제를 풀 때 중요한 것은 주어진 문제 내의 코드를 분석하는 것 입니다. 주어진 MenOfPassion 함수는 2개의 변수 (A, n)를 입력으로 받습니다. 내부 알고리즘에서 중요한 부분은 반복문입니다. 보시면 3개의 반복문으로 구성되어 있음을 알 수 있습니다. 그리고 각 반복문 별로 서로 다른 횟수로 반복을 하기 때문에 이를 잘 파악해야합니다. 1). i = 1이라고 가정하면 j = 2 ~ n - 1까지 반복합니다. 그리고 다시 j = 2라고 하면 k = 3 ~ n까지 반..
핵심 포인트 시간 복잡도 제출코드 n = int(input()) print(n ** 3) print(3) 해설 이 문제를 풀 때 중요한 것은 주어진 문제 내의 코드를 분석하는 것 입니다. 주어진 MenOfPassion 함수는 2개의 변수 (A, n)를 입력으로 받습니다. 내부 알고리즘에서 중요한 부분은 반복문입니다. 보시면 3개의 반복문으로 구성되어 있음을 알 수 있습니다. 그리고 각 반복문은 1부터 n까지 3번 반복되기 때문에 $n^{3}$번 함수를 실행합니다. 참고자료 및 그림출처 백준 코딩 문제