본문 바로가기

[ 알고리즘 ]36

[ BOJ 오답노트 ] 1149 파이썬 : RGB거리 2022 03 22 1. 틀린 기록 2. 원인 분석 - 일단 틀린 내용은 없지만 정말 오랫동안 고민했고, 다른 분들 코드를 보고 풀었기 때문에 오답노트를 했다. - 이 문제는 분명히 다이나믹 프로그래밍인데, 도저히 어떻게 dp를 사용해야할 지 감이 안 잡혔다. - 모든 경우의 수를 다 따져봤을 경우에는 시간 초과 판정이 날 것이라고 생각했다. 3. 해결 n = int(input()) rgb = [] for i in range(n): lst = list(map(int, input().split(' '))) rgb.append(lst) for i in range(1, n): # R rgb[i][0] = min(rgb[i-1][1], rgb[i-1][2]) + rgb[i][0] # G rgb[i][1] = m.. 2022. 3. 22.
[ BOJ 오답노트 ] 1904 파이썬 : 01타일 2022 03 12 1. 틀린 기록 2. 원인 분석 - 시간 초과 판정 :일단 처음에는 가능한 모든 이진수 표현을 리스트에 저장하려고 했다. 그런데 굳이 이진수를 다 저장할 필요 없이 그냥 가능한 개수만 출력하면 됐던 것이다. - 메모리 초과 (1) :메모리 초과가 당연히 발생할 수밖에 없었던 것이 배열에 저장되는 이진수 문자열의 길이가 n 값이 커질 수록 매우 커지기 때문이다. n = int(input()) arr = [[] for _ in range(n+1)] arr[1].append('1') arr[2].append('00') arr[2].append('11') if n >= 3: for i in range(3, n+1): for j in range(len(arr[i-2])): bin1 = arr[.. 2022. 3. 12.
[ BOJ 오답노트 ] 15650 파이썬 : N과 M (2) 2022 03 01 1. 틀린 기록 2. 원인 분석 - 틀리지는 않았지만 생각하는 데에 오래 걸려서 오답노트를 적기로 했다. - 그 전 문제인 15649번과 다른 점이 동일한 쌍은 한번만 출력하도록 하는 것이다. - 따라서 출력할 때의 첫번째 원소가 기준이 되어서 그 다음 원소들이 점점 커지는 형태로 출력되어야 한다. 3. 해결 n, m = map(int, input().split(' ')) arr = [] def nm(start): if len(arr) == m: print(' '.join(map(str, arr))) else: for i in range(start, n+1): if i not in arr: arr.append(i) nm(i + 1) arr.pop() start = 1 nm(start).. 2022. 3. 1.
[ BOJ 오답노트 ] 10989 파이썬 : 수 정렬하기 3 2022 02 28 1. 틀린 기록 2. 원인 분석 - 메모리 초과가 떴다. 아무래도 입력되는 모든 숫자들을 저장하는 방법으로 풀면 최대 입력 개수인 10000000 크기의 리스트가 필요하기 때문에 메모리 초과 판정을 받은 것 같다. - 그래서 생각한 방법은, 중복적으로 들어오는 값을 횟수만큼 저장하는 것이 아니라, 입력될 수 있는 가장 작은 숫자인 1부터 입력될 수 있는 가장 큰 숫자인 10000을 저장할 수 있는 리스트를 미리 만들어 두는 것이다. - 이 리스트를 0으로 초기화하고, 나오는 개수만큼 +1 해주어서 입력된 횟수만큼 반복해서 출력해주는 방식으로 정렬하는 것이다. - 이 방법은 굳이 sort() 를 사용하지 않아도 된다는 점과 리스트의 크기를 줄일 수 있다는 점에서 유용한 방식이라고 생각했.. 2022. 2. 28.