본문 바로가기

알고리즘124

병든 나이트[백준 1783] - python 예전에 무진장 겁먹고 못풀었던 문제 정답코드 먼저 살펴보자 n,m = map(int, input().split()) if n == 1 : print(1) elif n == 2 : print(min((m + 1) // 2, 4)) else : if m < 7 : print(min(m, 4)) else : print(m - 2) 핵심은 1,2,3,4 조건의 경우 무조건 오른쪽으로 움직인다는 거다.(왼쪽으로는 돌아올수 없다.) 4번 다 완료하면 오른쪽으로 이동한 수는 6이 된다. 왠지 6이 기준점이 될것 같았다. n이 1이면 이동은 불가능해서 1 n이 2이면 최대 4의 경우이거나 m을 2로 나눈 경우중 최솟값의 가지수를 가지게 된다 n이 3이상이면 위로 혹은 아래로 이동하는 경우의 수는 제약을 받지 않으므로 .. 2021. 12. 13.
RGB거리[백준 1149] - python 정답 코드 먼저 살펴보자 n = int(input()) cost = [] for _ in range(n) : cost.append(list(map(int, input().split()))) for i in range(1, len(cost)) : cost[i][0] = min(cost[i-1][1], cost[i-1][2]) + cost[i][0] cost[i][1] = min(cost[i-1][0], cost[i-1][2]) + cost[i][1] cost[i][2] = min(cost[i-1][0], cost[i-1][1]) + cost[i][2] print(min(cost[n-1][0], cost[n-1][1], cost[n-1][2])) 너무 어렵게 생각했었다. 각 라운드에 빨강, 파랑, 초록을 색.. 2021. 12. 12.
RGB거리2[백준 17404] - python 너무 어려웠다. 결국 다른 분들의 잘 짜신 코드를 참고했다. ㅠㅠ 정답코드 먼저 살펴보자 n = int(input()) cost = [] INF = 1e9 for _ in range(n): cost.append(list(map(int, input().split()))) result = INF for start_number in range(3) : dist = [[0] * 3 for _ in range(len(cost))] for i in range(3) : if i != start_number : dist[0][i] = INF else : dist[0][i] = cost[0][i] for i in range(1, len(cost)): dist[i][0] = min(dist[i-1][1], dist[i-1.. 2021. 12. 11.
숨바꼭질3[백준13549] - python 숨바꼭질 시리즈 3번째 문제다 정답 코드 먼저 살펴보자 from collections import deque n, k = map(int, input().split()) location = [-1] * 100001 time = 0 queue = deque() queue.append([n, time]) location[n] = 0 while queue : curr_n, curr_time = queue.popleft() next_n = curr_n * 2 if 0 3 -> 6 -> 12 ii) 4 -> 5 -> 6 -> 12 6에 접근을 하는 경우가 i)의 경우 1, ii)의 경우 2이다. 내 코드에서는 ii)의 경우가 먼저 6에 접근이 되었고 i)의 경우에서 6에 접근할때 기존 6에 업데이트를 해주어야 했다.. 2021. 12. 10.
숨바꼭질2[백준 12851] - python 방문한 곳의 최소 시간과 방법의 수를 출력해주어야 한다. 각 지점마다 두개의 정보를 가지고 있어야 하므로 이차원 배열로 선언해 주었다. 정답 코드 먼저 살펴보자 n, k = map(int, input().split()) MAX_LENGTH = 100001 visited = [[-1, 0] for _ in range(MAX_LENGTH)] queue = [] queue.append(n) # 처음 방문한 곳은 방문정보와 방법의 수를 업데이트 visited[n][0] = 0 visited[n][1] = 1 while queue : x = queue.pop(0) for i in [x-1, x+1, x*2] : if 0 2021. 12. 9.
최소공배수 [백준 1934] - python 앞으로 글을 작성할때 근거를 같이 작성하려고 한다. 코드를 작성한 근거나, 자료구조를 선택한 근거, 어떤 논리를 적용한 근거... 너무 무지성으로 진행하고 있었지 않나 싶다. 개인적인 이야기는 각설하고 코드를 같이 살펴보자 def gcd(first, second) : array = [0] * (first + 1) for i in range(1, first+1) : if first % i == 0 : array[i] = 1 max_num = 0 for i in range(len(array)): if array[i] == 1 and second % i == 0: max_num = i return max_num t = int(input()) for _ in range(t) : a,b = map(int, inp.. 2021. 12. 7.