본문 바로가기

코딩 테스트/다이나믹 프로그래밍11

[백준 2533번] 사회망 서비스(SNS) 문제 풀이 (with Python) 2023. 11. 10.
[백준 1082번] 방 번호 문제 풀이 (with Python) 처음 풀때는 구현 + 그리디 문제인줄 알았다. 그래서 방 번호와 가격을 하나의 튜플로 놓고 가격을 기준으로 정렬을 해야겠다고 생각했다. 그 다음 만들 수 있는 가장 긴 자릿수를 구해서, 그 자릿수에서 만들 수 있는 가장 큰 값을 구하는 방식으로 구현했다. 예시 입출력은 동일했으나, 계속 결과값이 틀렸다고 한다. 왜 틀렸는지 모르겠다... 두번째로 인터넷에서 코드를 참고해보았다. 알고보니 DP 문제로 수월하게 풀리는 문제였다. DP배열에 해당 돈으로 살 수 있는 방번호의 수 중 가장 큰 값을 저장하면 된다. - 실패 import sys input = sys.stdin.readline price = [] N = int(input()) P = list(.. 2023. 9. 25.
[백준 1005번] ACM Craft 문제 풀이 1005번: ACM Craft (acmicpc.net) 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net from collections import deque import sys input = sys.stdin.readline n = int(input()) for _ in range(n): N, K = map(int, input().split()) arr = [[] for _ in range(N + 1)] # 연결된 건물 정보 배열 cnt_arr = [0] * (N+1) time .. 2023. 9. 11.
[백준 1965번] 상자 넣기 문제풀이 (with Python) 이전에 풀었던 백준 11722번과 매우 유사한 문제였다. 비슷한 로직으로 뒤의 숫자가 더 크면 dp[ 뒤의 숫자 ] 와 dp[앞의 숫자] + 1 을 비교해서 더 큰 수를 저장했다. N = int(input()) arr = list(map(int, input().split())) dp = [1 for _ in range(N)] for i in range(N): for j in range(i+1, N): if arr[i] < arr[j]: dp[j] = max(dp[i] + 1, dp[j]) print(max(dp)) 2023. 8. 24.