백준
![[python] 백준 - 4883. 삼각 그래프](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcf1gcN%2FbtqIObLnbbA%2FX8kwVlc1IVhnlduEPiAksK%2Fimg.png)
[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. 트럭](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEi87g%2FbtqIObj6bMw%2F7wxCUcXb6hUi4kHJsjXCw1%2Fimg.jpg)
[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] 백준 - 16953. A → B](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnnMhU%2FbtqIOaAmfqu%2FhzWbjkQNUnUsHoRueZtBuK%2Fimg.png)
[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] 백준 - 2343. 기타 레슨](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTiBs3%2FbtqHYJ3cXp8%2FWJj2txHKo0uSQDXvlYIKrK%2Fimg.png)
[python] 백준 - 2343. 기타 레슨
🤔문제 해결 S1 | 이분 탐색 이분 탐색 문제는 무엇을 탐색 할 것인지가 가장 중요합니다. 이 문제에서는 블루레이의 최소 크기 를 찾아야 합니다. 처음에 각각의 블루레이에 레슨들을 순서대로 담아야 합니다. 블루레이의 크기가 11라고 가정해 보겠습니다. 그렇게 되면 레슨들의 합이 11을 넘어서는 안됩니다. 그럼 아래와 같은 결과를 얻을 수 있습니다. 총 5개의 블루레이에 담아야 합니다. 테스트 케이스에서는 3개에 담으라고 했으니 답이 될 수 없습니다. 그렇다면 블루레이 크기를 늘려서 한 블루레이에 좀 더 많이 담아야 겠다는 생각을 할 수 있습니다. 15라고 가정해 보겠습니다. 총 4개의 블루레이에 담았습니다. 하지만 여전히 블루레이 개수가 많습니다. 블루레이의 크기를 더 늘려야 합니다. 만약 30으로 크..
![[python] 백준 - 1926. 그림](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5WuYc%2FbtqHZjwrAmc%2FGaVg3I4CPVUUE7Cgbu6YsK%2Fimg.png)
[python] 백준 - 1926. 그림
🤔문제 해결 S1 | BFS, 그래프 그림을 하나 선택 한다. 그 그림의 상하좌우를 탐색한다. 만약 상하좌우에 그림이 있다면 그 그림을 선택 후 다시 상하좌우 선택한다. 더 이상 처음 선택한 그림과 연결된 그림이 없을 때 까지 탐색. 위의 과정을 반복한다. 처음 그림을 선택하면 그림의 갯수 +1 그림선택후 상하좌우 탐색하면서 그림을 찾으면 그림의 크기 +1 💨 기본적인 BFS 문제 💻소스 코드 from collections import deque def bfs(x, y): q = deque() q.append((x, y)) images[i][j] = 0 size = 1 # 최초 들어갈 때 그림 크기 1로 시작 while q: x, y = q.popleft() for k in range(4): # 상하좌우..
![[python] 백준 - 1743. 음식물 피하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtZntI%2FbtqHP41ZE9N%2FIIoNrVJ8BoxRsJLQTUsrZ0%2Fimg.png)
[python] 백준 - 1743. 음식물 피하기
🤔문제 해결 S1 | BFS 이번에는 2차원리스트를 활용하지 않고 set()을 활용하여 문제를 해결했다. 각각의 좌표가 주어져 있으므로 쓰레기를 하나 선택해 상하좌우 BFS탐색을 한다. 주변의 쓰레기를 선택할 때마다 visited 에 add 해준다. 또 count + 1 을 해줘서 쓰레기 더미의 크기를 answer 에 담는다. 💨 set() 을 쓰는 이유 if tmp in set() : 이렇게 tmp가 set()에 있는지 없는지 확인할 때 시간복잡도가 O(1) 이다. 하지만 if tmp in list : list의 경우 O(n) 이다. 💻소스 코드 import sys from collections import deque def bfs(x, y): q = deque() q.append((x, y)) cnt..