Python

    [python] 백준 - 2410. 2의 멱수의 합

    [python] 백준 - 2410. 2의 멱수의 합

    🤔문제 해결 S1 | 다이나믹프로그래밍 유사한 문제 [python] 백준 - 9084. 동전 🤔문제 해결 1. S1 | 다이나믹 프로그래밍 2. target(만들어야 하는 금액)의 길이만큼의 리스트를 만든다. 3. 내가 가진 동전을 하나하나 꺼내서 리스트의 인덱스(내가 만들 수 있는 금액)과 비교하�� deok2kim.tistory.com 동전 문제와 다른 점은 동전은 처음부터 사용할 값이 정해져 있지만 이 문제는 N의 크기에 따라 사용할 수 있는 값이 늘어난다. N이 7이면 1,2,4 이지만 N이 8이면 1,2,4,8 을 사용할 수 있다. 💨 💻소스 코드 def solution(N): nums = [2 ** x for x in range(21)] dp = [0] * (N + 1) dp[0] = 1 fo..

    [python] 백준 - 4883. 삼각 그래프

    [python] 백준 - 4883. 삼각 그래프

    🤔문제 해결 S1 | 다이나믹프로그래밍 최소가중치? 라고 생각해서 별 생각없이 다익스트라로 풀었더니 바로 시간초과 다시 읽어보니 경로가 각 지점마다 단순해서 다이나믹프로그래밍으로 푸는 문제였다. 문제에서 주어진 삼각그래프와 똑같은 크기의 2차원리스트를 만든다. 리스트의 각 요소는 i,j에 도달 할 때의 가장 최솟값을 저장한다. 이제 dp 값을 저장하는 방법을 설명하면 먼저 1행까지는 직접 값을 채워 넣고, 나머지는 for문을 돌린다. (1,0): (0,1)에서 오는 값 (1,1): (0,1), (1,0)에서 오는 값 (1,2): (0,1), (1,1), (0,1)+(0,2) 에서 오는 값 여기서 중요한건 노란색으로 표시한 저 부분이다. 문제에서 각 노드의 가중치는 정수이다. 다시 말해서 음수가 포함되어 ..

    [python] 백준 - 13335. 트럭

    [python] 백준 - 13335. 트럭

    🤔문제 해결 S1 | 스택 대기중인 트럭, 다리위의 트럭, 다리위의 트럭의 진입 시간 을 각각의 리스트로 구성한다. 다리 위의 트럭 중 가장 앞쪽의 트럭의 진입 시간 + 다리의 길이 가 현재시간과 같으면 그 트럭을 빼준다. (도착) 다리 위의 트럭 무게의 합 + 대기 중인 트럭 중 가장 앞쪽의 트럭 무게 가 다리의 하중보다 작으면 그 트럭을 대기중인 트럭에서 빼서 다리위의 트럭으로 넣어준다. (출발) 💨 💻소스 코드 from collections import deque def solution(n, w, L, trucks): trucks = deque(trucks) # 대기중인 트럭 on_the_bridge = deque() # 다리위의 트럭 departure_time_truck = deque() # 각 ..

    [python] SWEA - 6019. 기차 사이의 파리

    [python] SWEA - 6019. 기차 사이의 파리

    🤔문제 해결 D3 | 수학? 파리와 맞은 편 기차가 만나는 시간은 t 로 같다 파리와 맞은 편 기차가 이동한 거리의 합은 D 이다. 이렇게 저렇게 식을 계산 해보면 파리가 이동한 거리는 파리가 이동한거리는 따로 누적해주고, 파리의 속력과 이동한거리가 있으므로 시간을 구해주고 구한 시간으로 기차의 이동거리를 구해준다. 그럼 남은 기차사이의 간격은 (기존의 기차사이의 간격 - 두 기차의 이동거리) 💻소스 코드 if __name__ == "__main__": T = int(input()) for tc in range(1, 1 + T): # 사이의 거리, A 속력, B 속력, 파리 속력 D, A, B, F = map(int, input().split()) # s = v*t 파리가 날아간 거리 fly_d = 0 ..

    [python] 백준 - 16953. A → B

    [python] 백준 - 16953. A → B

    🤔문제 해결 S1 | 그래프, BFS 난 DFS 알고리즘 분류에는 그래프와 BFS로 나와있는데 잘 모르겠고, DFS로 해결했다. 목표 숫자부터 두가지 경우로 나눠서 들어간다. 맨 끝의 숫자가 1이면 1을 버리고 재귀 맨 끝의 숫자가 1이 아닐 때 2로 나누어 떨어지면 2로 나누고 재귀 테스트 케이스 3번을 예시로 하겠다 ( 100, 40021 ) 40021: 맨 끝의 숫자가 1이므로 1을 버린다 40021 => 4002 체크하는 방법은 10으로 나눈 나머지, 버리는 방법은 10으로 나눈 몫 4002: 맨 끝의 숫자가 1이 아니고 2로 나누어 떨어지므로 2로 나눈다. 4002 => 2001 2001: 버린다. 2001 => 200 200: 나눈다. 200 => 100 100: 100 == A 이므로 그만!..

    [python] SWEA - 1248. 공통조상

    [python] SWEA - 1248. 공통조상

    🤔문제 해결 D5 | 그래프 이진 트리를 만들어서 문제를 해결하자. 이런식으로 2차원 배열을 만든다. 길이가 3인 리스트가 V개인 2차원리스트 부모 노드들 찾기첫 노드 (여기서는 8 과 13) 에서 시작해서 부모 노드를 타고 쭉 올라간다. ( DFS ) 8 의 부모 노드는 [5, 3, 1] 13의 부모 노드는 [11, 6, 3, 1] 공통 부모 노드 찾기 앞에서부터 for문을 돌며 겹치는 친구 찾고 바로 나오기 (여기서는 3) 공통 부모 노드 크기 찾기 노드(여기서는 3)에서 자식 노드를 타고 쭉 내려가면서 개수를 세어준다(DFS) 💨 💻소스 코드 def find_parent(n, parent_list): if tree[n][2]: parent_list.append(tree[n][2]) find_pare..