Coding Test
-
[백준 11054번] 가장 긴 바이토닉 부분 수열Coding Test/백준 2021. 2. 6. 04:40
# 문제 내 풀이 n = int(input()) nums = list(map(int, input().split())) # 수열 입력 받기 # 가장 긴 증가하는 부분 수열과 감소하는 부분 수열 각각을 위한 DP 테이블 생성 및 초기화 dp_asc = [1] * 1000 dp_desc = [1] * 1000 # 가장 긴 증가하는 부분 수열 (LIS) 알고리즘 수행 for i in range(1, n): for j in range(0, i): if nums[i] > nums[j]: dp_asc[i] = max(dp_asc[i], dp_asc[j] + 1) # 가장 긴 감소하는 부분 수열 알고리즘 수행 for i in range(n - 2, -1, -1): for j in range(n - 1, i, -1): ..
-
[백준 11053번] 가장 긴 증가하는 부분 수열Coding Test/백준 2021. 1. 30. 14:08
# 문제 내 풀이 # 내 풀이 n = int(input()) nums = list(map(int, input().split())) # 수열 입력 받기 # DP 테이블 생성 및 초기화 dp = [1] * 1000 # 가장 긴 증가하는 부분 수열(LIS) 알고리즘 수행 for i in range(1, n): for j in range(0, i): if nums[j] < nums[i]: dp[i] = max(dp[i], dp[j] + 1) # 결과 출력 print(max(dp))
-
[백준 2156번] 포도주 시식Coding Test/백준 2021. 1. 30. 01:53
# 문제 내 풀이 - 문제 풀이 실패, 수정 답안 n = int(input()) wine = [0] # 인덱스를 맞추기 위해 0 추가 # 와인 정보 입력 받기 for _ in range(n): wine.append(int(input())) # DP 테이블 생성 및 초기화 dp = [0] * 10001 dp[1] = wine[1] if n > 1: dp[2] = wine[1] + wine[2] for i in range(3, n + 1): # 3가지 경우를 고려 # 1. i 번째 와인을 마시지 않는 경우 # 2. i 번째 외인을 마시는 경우 # - 2-1. i - 1 번째 와인을 마시는 경우 # - 2-2. i - 1 번째 와인을 마시지 않는 경우 dp[i] = max(dp[i - 1], dp[i - 3]..
-
[백준 10844번] 쉬운 계단 수Coding Test/백준 2021. 1. 25. 21:21
# 문제 내 풀이 # 내 풀이 n = int(input()) # 자리수마다 가장 뒤에 오는 숫자 0 ~ 9를 고려하는 DP 테이블 생성 dp = [[0] * 10 for _ in range(101)] # DP 테이블 초기화 for i in range(1, 10): dp[1][i] = 1 # 바텀업 다이나믹 프로그래밍 수행 for i in range(2, 101): # 0과 9에 대해 점화식 수행 dp[i][0] = dp[i - 1][1] dp[i][9] = dp[i - 1][8] # 1 ~ 8까지의 점화식 수행 for j in range(1, 9): dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1] # 결과 출력 print(sum(dp[n]) % int(1e9))
-
[백준 1463번] 1로 만들기Coding Test/백준 2021. 1. 24. 03:15
# 문제 내 풀이 n = int(input()) INF = int(1e9) # 무한 값으로 10억 설정 # DP 테이블 생성 및 초기화 dp = [0] * 1000001 dp[1] = 0 # 바텀업 다이나믹 프로그래밍 진행 for i in range(2, n + 1): d3 = dp[i // 3] if i % 3 == 0 else INF # 3으로 나누는 경우 d2 = dp[i // 2] if i % 2 == 0 else INF # 2로 나누는 경우 dp[i] = min(d3, d2, dp[i - 1]) + 1 # 세 가지 연산 중 최소 연산 횟수인 경우를 택해, 연산 진행 및 테이블 값 갱신 # 결과 출력 print(dp[n])
-
[백준 2579번] 계단 오르기Coding Test/백준 2021. 1. 23. 23:06
# 문제 내 풀이 n = int(input()) # 계단 수 입력 받기 stairs = [0] # 시작점 초기화 # 계단 점수 입력 받기 for _ in range(n): stairs.append(int(input())) # 계단이 1개일 경우 if n == 1: print(stairs[1]) # 계단이 2개 이상일 경우 else: # DP 테이블 생성 및 초기화 dp = [0] * 301 dp[1] = stairs[1] dp[2] = dp[1] + stairs[2] # 바텀업 다이나믹 프로그래밍 수행 for i in range(3, n + 1): # i번째 계단에 두 계단을 밟고 오르는 경우와, 한 계단을 밟고 오르는 경우를 비교해 최대 점수 구하기 dp[i] = max(dp[i - 2] + stair..