-
반응형
https://programmers.co.kr/learn/courses/30/lessons/43236
코딩테스트 연습 - 징검다리
출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가
programmers.co.kr
풀이
이분탐색으로 문제를 풀었다.
먼저 돌들이 순서대로 들어왔다는 보장이 없으므로, 정렬을 해준뒤, 마지막 도착지점도 돌을 놔준다.
그다음 이분탐색의 mid값을 돌다리 사이의 최소거리라고 생각을 하고, 돌들을 탐색하면서 이 최소거리로 건너뛸 수 있는 돌들을 체크해준다. 이 돌들이 제거하려는 돌보다 많다면, 간격을 줄이기 위해 right의 값을 갱신시켜주고, 돌들이 제거하려는 돌보다 적거나 같다면, 간격을 늘려주기 위해 left값을 갱신시켜주면된다.
시간복잡도
정렬에 O(NlogN)시간이 걸리며, 이분탐색으로 O(NlogN)이 걸리므로, 총 O(NlogN)이 된다
코드
#include <string> #include <vector> #include<algorithm> using namespace std; int solution(int distance, vector<int> rocks, int n) { int answer = 0; rocks.push_back(distance); sort(rocks.begin(),rocks.end()); int left=0; int right=1000000000; while(left<=right){ int mid=(left+right)/2; int sum=0; int st=0; for(int i=0;i<rocks.size();i++){ if(rocks[i]-st<mid){ sum++; } else{ st=rocks[i]; } } if(sum>n){ right=mid-1; } else{ answer=mid; left=mid+1; } } return answer; }
반응형'문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 큰 정사각형 찾기 (0) 2021.10.10 [프로그래머스] 동물 수 구하기 (0) 2021.09.05 [프로그래머스] 예상 대진표 (0) 2021.07.30 [프로그래머스] 구명보트 (0) 2021.07.20 [프로그래머스] 카카오 프렌즈 컬러링북 (0) 2021.07.11 댓글