전체 글
-
[백준] 2293번 동전 1 (파이썬)
2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 코드 n, k = map(int, input().split(" ")) li = [] for _ in range(n): li.append(int(input())) dp_li = [0 for _ in range(k+1)] dp_li[0] = 1 for i in li: for j in range(i,k+1): dp_li[j] += dp_li[j-i] print(dp_li[k])
-
[백준] 2629번 양팔저울 (파이썬)
2629번: 양팔저울 첫째 줄에는 추의 개수가 자연수로 주어진다. 추의 개수는 30 이하이다. 둘째 줄에는 추의 무게들이 자연수로 가벼운 것부터 차례로 주어진다. 같은 무게의 추가 여러 개 있을 수도 있다. 추의 무 www.acmicpc.net 코드 n = int(input("")) n_list = list(map(int, input().split())) m = int(input("")) m_list = list(map(int, input().split())) possible = [] answer = [[0]*15001 for i in range(n+1)] def solution(n_list, n, now, left, right, possible): new = abs(left-right) if new n..
-
[백준] 10942번 팰린드롬? (파이썬)
10942번: 팰린드롬? 총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다. www.acmicpc.net 코드 import sys n = int(input()) n_li = list(map(int, sys.stdin.readline().split(" "))) m = int(input()) m_li = [] for _ in range(m): m_li.append(list(map(int, sys.stdin.readline().split(" ")))) check_li = [[False]*n for _ in range(n)] for i in range(n): for j in range(n-i): x = j+i i..
-
[백준] 1520번 내리막 길 (파이썬)
1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으 www.acmicpc.net 코드 import sys m, n = map(int, sys.stdin.readline().split(" ")) check_li = [[-1 for _ in range(n)] for _ in range(m)] li = [] for _ in range(m): li.append(list(map(int, sys.stdin.readline().split(" ")))) x_ext_li = [0,0,1,-1] y_ext_li = [1,-1,0,0] def dfs(node): x..
-
[백준] 11049번 행렬 곱셈 순서 (파이썬)
11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같 www.acmicpc.net 코드 def solution(n, li): dp = [[0 for _ in range(n)] for _ in range(n+1)] for i in range(1, n): for j in range(n-i): dp[j][j+i] = 2**32 #최댓값을 미리 넣어줌 for k in range(j, j+i): dp[j][j+i] = min(dp[j][j+i], dp[j][k] + dp[k+1][j+i] + li[j][0] * li[k][1] * li[j+..
-
[백준] 11066번 파일 합치기 (파이썬)
11066번: 파일 합치기 소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본 www.acmicpc.net 코드 def merge(k, li): memo = list([0] * k for _ in range(k)) for i in range(k - 1): memo[i][i + 1] = li[i] + li[i + 1] for j in range(i + 2, k): memo[i][j] = memo[i][j - 1] + li[j] for l in range(2, k): for i in range(k - l): j = i + l minimum = list(memo[i..
-
[백준] 1655번 가운데를 말해요 (파이썬)
1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 코드 import heapq import sys left, right = [], [] n = int(input()) for _ in range(n): x = int(sys.stdin.readline()) if len(left) == len(right): heapq.heappush(left, (-x, x)) else: heapq.heappush(right, (x, x)) if right and left[0][1] > right[0][1]: left..
-
[백준] 11286번 절댓값 힙 (파이썬)
11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 코드 import heapq import sys n = int(input()) queue = [] for _ in range(n): x = int(sys.stdin.readline()) if x == 0: if not queue: print(0) else: print(heapq.heappop(queue)[1]) else: heapq.heappush(queue, (abs(x),x))