전체 글
-
[백준 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..
-
[백준 1149번] RGB거리Coding Test/백준 2021. 1. 22. 19:38
# 문제 내 풀이 - 문제 풀이 실패, 수정 답안 n = int(input()) rgb = [[]] # 비용이 인덱스 1번부터 시작되도록 인덱스 0에 빈 리스트 추가 for _ in range(n): rgb.append(list(map(int, input().split()))) # 각각의 색에 대하여 dp 테이블 생성 및 초기화 dp_r = [0] * 1001 dp_g = [0] * 1001 dp_b = [0] * 1001 dp_r[1] = rgb[1][0] dp_g[1] = rgb[1][1] dp_b[1] = rgb[1][2] # 바텀업 다이나믹 프로그래밍 수행 for i in range(2, n + 1): dp_r[i] = min(dp_g[i - 1], dp_b[i - 1]) + rgb[i][0] d..
-
[백준 9461번] 파도반 수열Coding Test/백준 2021. 1. 20. 15:42
# 문제 내 풀이 t = int(input()) # dp 테이블 생성 및 초기화 dp = [0] * 101 dp[1] = 1 dp[2] = 1 dp[3] = 1 dp[4] = 2 dp[5] = 2 # 바텀업 다이나믹 프로그래밍 수행 for i in range(6, 101): dp[i] = dp[i - 1] + dp[i - 5] # 각 테스트 케이스 별 결과 출력 for _ in range(t): n = int(input()) print(dp[n])
-
[백준 1904번] 01타일Coding Test/백준 2021. 1. 19. 02:33
# 문제 내 풀이 - 문제 풀이 실패, 수정 답안 n = int(input()) # dp 테이블 생성 및 초기화 dp = [0] * 1000001 dp[1] = 1 dp[2] = 2 # 바텀업 다아나믹 프로그래밍 수행 for i in range(3, n + 1): dp[i] = (dp[i - 1] + dp[i - 2]) % 15746 # 숫자 표현 범위를 벗어나지 않기 위해 나머지 연산을 항상 적용 print(dp[n]) 문제 접근 끝이 00일 경우와 1일 경우로 나누어 생각하면 결과적으로 피보나치 수열이 나온다. 생각할 점 정답률이 아주 낮진 않아서 쉬운 문제라 생각했는데, 아이디어도 잘 생각나지 않고 런타임에러에 메모리 초과까지 신경쓸 부분이 많았다. 15746으로 나누는 것도 계산할 때마다 적용해서..
-
[백준 1956번] 운동Coding Test/백준 2021. 1. 17. 23:27
# 문제 내 풀이 - Pypy에서 성공 import sys input = sys.stdin.readline INF = int(1e9) v, e = map(int, input().split()) graph = [[INF] * (v + 1) for _ in range(v + 1)] # 인접행렬 생성 # 간선 정보 입력 받기 for _ in range(e): a, b, c = map(int, input().split()) graph[a][b] = c # 플로이드 워셜 알고리즘 수행 for k in range(1, v + 1): for i in range(1, v + 1): for j in range(1, v + 1): graph[i][j] = min(graph[i][j], graph[i][k] + graph[..