본문 바로가기

Algorithm/Programmers4

[Programmers] Lv.2 _ [PCCP 기출문제] 2번 / 석유 시추 풀이1. 시추 가능한 덩어리 별 크기를 카운트2. 해당 덩어리가 포함된 y 축에 덩어리 크기를 더해준다. 덩어리 별 크기 카운트를 위해서는 2차원 BFS를 사용했다.그리고 해당 덩어리가 포함된 y 축을 구하기 위해 BFS로 좌표를 돌면서 set을 통해 y 값을 넣어줬다.한 덩어리 당 BFS가 종료되면 y 값이 담긴 set을 순회하며 해당 y 값에 덩어리 크기를 더해줬다. 효율성 검사도 포함되어 있기 때문에 처음엔 통과하지 못했다.최대한 자료구조를 덜 쓰기 위해queue 라이브러리 대신 list를 사용했고, set을 사용하였다.코드queue = []def bfs(land, oils, visited): dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] cnt = 0 c.. 2025. 1. 18.
[Programmers] Lv.2 _ [PCCP 기출문제] 3번 / 충돌 위험 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/340211 풀이운송 포인트 2차원 배열: points운송 경로 2차원 배열: routes 흐름은1. 각 운송 로봇 경로의 모든 칸을 배열에 담는다.      1-1.  모든 운송 로봇을 한 배열에 담는다.      1-2. 운송 포인트 별로 출발지 - 도착지를 갱신하며 모든 운송 포인트를 돈다.2. 시점을 순회하며 같은 충돌 위험 좌표의 개수를 센다.      2-1. 같은 좌표가 2개 이상이어야 한다. 운송 로봇의 경로는 1) 출발지 좌표 r  == 도착지 좌표 r 될 때까지 r 좌표 한 칸씩 전진2) 출발지 좌표 c == 도착지 좌표 c 될 때까지 c 좌표 한 칸씩 전진이 경로를 리스트에 담는다... 2025. 1. 6.
[Programmers] Lv.2 _ [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 https://school.programmers.co.kr/learn/courses/30/lessons/340212풀이퍼즐 난이도: diffs소요 시간: times제한 시간: limit숙련도: level 퍼즐 난이도가 숙련도보다 낮거나 같으면 (diffs[i] 해당 퍼즐의 소요 시간 (times[i]) 만큼만 소요. 퍼즐 난이도가 숙련도보다 높으면 (diffs[i] > level)해당 퍼즐의 이전 소요 시간 + 현재 소요 시간 을 난이도 - 숙련도 만큼 수행 후 현재 소요 시간 추가 소요. 퍼즐의 모든 소요 시간의 합이 limit보다 작은 숙련도 최솟값 구하기. 퍼즐의 숙련도는 최소: 1, 최대: max(diffs) 로 범위가 정해져있으며,수행 가능한 숙련도의 경계값을 찾는 문제이기 때문에 이분탐색 문제.. 2025. 1. 5.
[Programmers] Lv.1 _ 가장 많이 받은 선물 조건기록을 비교하여1. 기록이 존재할 경우 => 더 많이 준 사람의 선물 개수 +12. 기록이 존재하지 않는 경우 or 주고 받은 선물의 개수가 같은 경우 => 선물 지수가 더 큰 사람의 선물 개수 +13. 선물 지수까지 동일한 경우 => 선물을 주고 받지 않음 풀이입출력 예시에 친절하게 표가 나와있어 쉬운 문제긴 했다.먼저 주고 받은 선물 2차원 표, 선물 지수 1차원 리스트를 선언한다.선물 기록 리스트인 gifts를 돌며 준 사람, 받은 사람의 idx를 찾아 1) 준 사람은 선물 지수 + 12) 받은 사람은 선물 지수 - 13) 선물 2차원 표에 기록 ([준 사람 인덱스][받은 사람 인덱스])를 기록한다. 이후 2차원 표를 이중 for문으로 돌며 조건에 맞는 경우를 따져 최댓값을 찾는다. def so.. 2024. 6. 11.