파이썬
[python] 프로그래머스 - 도둑질
🤔문제 해결 Lv4 | DP "인접한 집은 털 수 없다" 까지는 크게 어려운 문제가 아니지만 "마을이 원형으로 되어 있다" 에서 한번 더 생각하게 하는 문제!! -> 0번째 집을 터는 경우( 마지막 집을 털지 못한다 )와 0번째 집을 안터는 경우 두가지로 나눌 수 있다. 먼저 0번집을 털 경우! 0번집에 들렀을 때 가장 많은 돈을 가져오는 경우는 0번집을 턴다. dp[0] = money[0] 1번집에 들렀을 때 가장 많은 돈을 가져오는 경우는 1번집을 터는 경우지만 우리는 1번집을 반드시 털었다고 가정했으므로 인접한 2번집은 털 수 없다. dp[1] = 0 2번집에 들렀을 때: 인접한 1번집이 아닌 0번집 또는 -1번집(2번일 때는 없다) 중 돈을 많이 가져왔던 집에서 온다. dp[2] = money[i..
[python] 프로그래머스 - 야근 지수
🤔문제 해결 Lv3 가장 큰 값을 조금 씩 줄여나가야 하는 문제! - 우선순위 큐를 이용했다. 우선순위 큐는 리스트에서 pop()을 하게 되면 가장 작은 값이 나오게 된다. 여기서는 가장 큰 값을 꺼내야 하므로 각각의 값을 음수로 힙큐에 넣어 줬다. 가장 작은 값(사실은 가장 큰 값)을 꺼내서 1씩 더해준다. 그리고 다시 힙큐에 넣어준다. 테스트 케이스 1번을 풀이 해 보자. 4, [4, 3, 3] 위 그림의 첫째줄은 처음 힙큐에 넣었을 때이다. 다음 줄부터는 1시간씩 지날 때 마다의 힙큐의 상황이다. -4가 제일 작으므로 -4를 꺼내서 1을 더해주고 다시 넣는다. -3을 꺼내서 1을 더해주고 다시 넣는다. 또 -3을 꺼내서 1을 더해주고 다시 넣는다. 마지막으로 -3을 꺼내서 1을 더해주고 다시 넣는다..
[python] 프로그래머스 - 쿠키 구입
🤔문제 해결 Lv4 기준점을 하나 정한다. 0부터 쿠키의 길이-1 까지 그 기준은 첫째 아들 과자, 기준 + 1은 둘째 아들 과자로 시작한다. 1. 첫째의 과자가 적으므로 첫째에게 과자를 하나 더 준다. 2. 둘째의 과자가 더 적으므로 둘째에게 과자를 하나 더 준다. 3. 첫째의 과자가 적으므로 첫째에게 과자를 하나 더 준다. 4. 둘째의 과자가 더 적으므로 둘째에게 과자를 하나 더 준다. 5. 둘의 과자가 같으므로 값을 저장하고 첫째부터 과자를 더 줘본다. (둘째 먼저 줘도 된다.) 6. 둘째의 과자가 더 적으므로 둘째에게 과자를 하나 더 준다. 7. 첫째의 과자가 더 적어서 첫째에게 과자를 더 주고 싶지만 더 이상 줄 과자가 없다. 8. 다음 기준을 잡고 위의 과정을 반복한다. 💨 💻소스 코드 def..
[python] 백준 - 2343. 기타 레슨
🤔문제 해결 S1 | 이분 탐색 이분 탐색 문제는 무엇을 탐색 할 것인지가 가장 중요합니다. 이 문제에서는 블루레이의 최소 크기 를 찾아야 합니다. 처음에 각각의 블루레이에 레슨들을 순서대로 담아야 합니다. 블루레이의 크기가 11라고 가정해 보겠습니다. 그렇게 되면 레슨들의 합이 11을 넘어서는 안됩니다. 그럼 아래와 같은 결과를 얻을 수 있습니다. 총 5개의 블루레이에 담아야 합니다. 테스트 케이스에서는 3개에 담으라고 했으니 답이 될 수 없습니다. 그렇다면 블루레이 크기를 늘려서 한 블루레이에 좀 더 많이 담아야 겠다는 생각을 할 수 있습니다. 15라고 가정해 보겠습니다. 총 4개의 블루레이에 담았습니다. 하지만 여전히 블루레이 개수가 많습니다. 블루레이의 크기를 더 늘려야 합니다. 만약 30으로 크..
[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. 음식물 피하기
🤔문제 해결 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..