목록DP (5)
코테 탈출일지
https://www.acmicpc.net/problem/2167 2167번: 2차원 배열의 합 첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 www.acmicpc.net 접근 방식 - 효율적인 2차원 배열 합 계산 고민 코드 풀이 n, m = map(int, input().split()) array_2d = [] # 2차원 배열 저장 for _ in range(n): tmp = list(map(int, input().split())) array_2d.append(tmp) dp = [[0]*(m+1) for _ in range(n+1)]..
https://www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net 접근 방식 - 점화식 고민하기 및 경우의 수 나누기 (2로만, 5로만, 조합으로만, 조합불가) - 수학적 구현 방법 고민 코드 풀이 n = int(input()) cnt = 0 while True: if n%5 == 0: cnt += n//5 # 5로 나누어 떨어질 때까지 break else: n -= 2 # 2를 빼주고 cnt += 1 # cnt 수 += 1 if n
https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 접근 방식 - dp로 푸는 경우, 메모제이션의 활용법 코드 풀이 t = int(input()) for _ in range(t): n, m = map(int, input().split()) dp = [[0]*(m+1) for _ in range(n+1)] # dp[i][j] = 좌에 i개, 우에 j개 스팟이 있을 때의 경우의 수 for i in range(1, n+1): for j in range(..
https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 접근 방식 - 효율적인 탐색법 고민 코드 풀이 n = int(input()) max_5 = n // 5 # 5kg 봉지의 최대 갯수 flag = 0 # 나누어떨어지는지 확인하기 위한 장치 for num_5 in range(max_5, -1, -1): # 역순, max_5 = 3라면 3, 2, 1, 0 순서로 호출 if (n - (num_5 * 5)) % 3 == 0: # 나머지 무게를 3kg 봉지로 만들 수..
https://www.acmicpc.net/problem/9655 9655번: 돌 게임 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net 접근 방식 - 점화식 세워보기 - 기본 조건 파악 - DP의 구현 방식 고민 코드 풀이 사실 코드 작성 계획을 세우며 돌의 갯수가 홀수이면 SK, 짝수이면 CY임을 발견했기 때문에 아래와 같이 간단하게 코드를 작성할 수도 있지만.. 동적 프로그래밍 연습을 위해 조금 더 고민을 이어 해봤습니다. n = int(input()) if n%2 == 1: print('SK') else: print('CY') 그래서 answerlist를 도입하여 answerlist[n]에 n개의 돌이 주어졌을때의 정보를 넣었고, 만들어진 리스트..