Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 백준
- Spring이란
- 그래프
- BinarySearch
- bitmasking
- Singtone
- 플로이드워셜
- 이진검색
- 알고리즘
- 카카오
- 프로그래머스
- 11723
- 가장먼노드
- 징검다리
- Spring
- 스프링이란
- 전화번호 목록
- 플로이드와샬
- 스프링프로젝트 시작하기
- Algorithm
- 카카오인턴
- 이진탐색
- 스프링
- @Profile
- 토비의스프링
- 자바
- sope
- 구현
- 쇠막대기 문제
- Java
Archives
- Today
- Total
육감적 코딩
[2019 카카오 개발자 겨울 인턴십] 징검다리 건너기 (java) 본문
문제설명
https://programmers.co.kr/learn/courses/30/lessons/64062
[제한사항]
- 징검다리를 건너야 하는 니니즈 친구들의 수는 무제한 이라고 간주합니다.
- stones 배열의 크기는 1 이상 200,000 이하입니다.
- stones 배열 각 원소들의 값은 1 이상 200,000,000 이하인 자연수입니다.
- k는 1 이상 stones의 길이 이하인 자연수입니다.
문제접근
알고리즘풀이 시, 제한사항을 참고하여 어떤 방향으로 문제를 접근할 지 생각하는 것은 중요합니다.
제한사항을 보면 알 수 있듯이 한 돌이 밟힘의 허용치가 최대 200,000,000 입니다. 그런돌이 200,000이 있으므로
니니즈 친구들을 한 명씩 보내면서 통과하면 answer++ 를 하기에는 범위가 무척 큽니다.
이와 비슷한 문제를 기존에 풀어서, 쉽게 풀이했습니다.
이분탐색을 이용하여 풀이하였습니다.
- left 값을 몇으로 잡아야 하나?
- stonse 원소의 최솟값인 1 로 잡았습니다.
- right 값을 몇으로 잡아야 하나?
- stonse 원소의 최대값인 200,000,000 로 잡았습니다.
- mid = (left+right)/2 // mid = left+right/2 로 풀다가 while문을 빠져나오지 못해서 잠깐 당황했었습니다.. ㅜㅜ
- stonse 배열을 순회하며 stonse[i]-mid 가 0보다 작다면 현재 바위에서부터 건너 뛴 횟수를 세어줍니다.
- 건너 뛴 횟수가 k 와 같거나 크다면 mid값에 해당하는 니니즈 친구들이 너무 많은 것입니다.
- 그러므로 해당 mid값에서의 더 이상의 순회는 필요없으므로 반복문을 나가도됩니다.
- right= mid-1
- 만약 stonse 배열을 모두 순회하여 조건을 만족한다면 answer이 될 가능성이있습니다.
- 하지만 최대의 answer은 아닐 수 있으므로 left = mid+1 이 됩니다
- answer = answer > mid ? answer:mid
코드
public int binarySearch(int[] stones, int k){
int left=1;
int right=200000000;
int mid=0;
int answer =0;
while(left <= right){
mid=(left+right)/2;
System.out.println(mid);
int cnt=0;
boolean isPossible=true;
for(int i=0; i<stones.length; i++){
int now = stones[i];
now-=mid;
if(now>=0){cnt=0;}
else if(now<0){ cnt++;}
if(cnt>=k){isPossible=false; break;}
}
if(isPossible==false){
right=mid-1;
}
else{
left=mid+1;
answer = answer>mid ? answer:mid;
}
}
return answer;
}
깃허브 : https://github.com/jsh9057/Algorithm/blob/master/src/KakaoWinter/SteppingStone.java
'Algorithm > 2019 카카오 개발자 겨울 인턴십' 카테고리의 다른 글
[2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 (java) (0) | 2020.08.14 |
---|---|
[2019 카카오 개발자 겨울 인턴십] 튜플 (java) (0) | 2020.08.14 |
Comments