개발계발/알고리즘 11

[2293] 동전1

백준 2293번 동전1 n, k = map(int, input().split()) c = [] dp = [0 for i in range(k + 1)] dp[0] = 1 for i in range(n): c.append(int(input())) for i in c: for j in range(1, k + 1): if j - i >= 0: dp[j] += dp[j - i] print(dp[k]) 핵심 아이디어 k길이의 배열을 만들고, 각 원소 별 경우의 수를 계산하여 k가 되는 경우의 수를 구한다. 설명 dp 배열에서 원소를 dp[key] = value 라고 한다면, key : 1, 2, 3, ... k value : key를 만들 수 있는 경우의 수 예를 들어 [1, 2, 5] coin을 가지고 k = 4..

[17729] 오등큰수 #python

백준 17299번 오등큰수 import sys num = int(input()) a = list(map(int, input().split(" "))) result = ["-1" for _ in range(num)] stack = [0] count = dict() for i in a: try: count[i] += 1 except: count[i] = 1 for i in range(num): while stack and count[a[stack[-1]]] < count[a[i]]: result[stack[-1]] = str(a[i]) stack.pop() stack.append(i) i+=1 print(" ".join(result)) [17298]오큰수와 같은 유형의 문제이다. 다만, 오등큰수는 각 원소 ..

[Tip] 백준 시간 초과 에러

로직의 이슈가 없는데도 시간 초과가 난다면, input() 대신 아래와 같이 sys 모듈을 사용하자. python 이외의 언어는 빠른 A+B를 참고하세요. import sys #num = int(input()) 대신 아래의 코드를 쓰자. num = int(sys.stdin.readline()) 하지만 우리는 코딩할 때, input()으로 코드를 짜기 때문에 이를 일일히 sys.stdin.readline() 바꾸기가 번거롭다. 그럴 때는 sys.stdin.readline 를 input 으로 덮어쓰면 조금 더 간편해진다. import sys input = sys.stdin.readline #기존의 코드를 수정할 필요가 없어진다. num = int(input()) 참고로, sys.stdin.readline()..

[11660] 구간 합 구하기5 #python

백준 11660번 구간 합 구하기 내가 푼 답 ⇒ 시간 초과! n, m = map(int, input().split()) square = [] for i in range(n): square.append(list(map(int, input().split()))) for i in range(m): x1, y1, x2, y2 = map(int, input().split()) data = list(map(lambda x: sum(x[y1-1:y2]), square[x1-1:x2])) print(sum(data)) 정답 import sys input = sys.stdin.readline n, m = map(int, input().split()) square = [list(map(int,input().split()..