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
- 세마포어란?
- 플로이드 와샬
- 플로이드 워셜
- 다익스트라
- 프록시서버
- 삼성 청년 SW 아카데미
- 세마포어
- 클라우드 서버
- Proxy
- 세마포어와 뮤텍스
- 세마포어와 뮤텍스의 차이
- 싸피 합격
- 동기화
- Dijkstra Algorithm
- 프록시
- Proxy Server
- floyd-warshall
- SSAFY
- 싸피
- 호스팅
- 다익스트라 알고리즘
- Synchronization
- 서버 호스팅
- 뮤텍스란?
- 뮤텍스
- 호스팅이란?
- 최단 경로
- 웹 호스팅
- 싸피 면접 후기
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[프로그래머스][2019 카카오 개발자 겨울 인턴십] 징검다리 건너기 본문
programmers.co.kr/learn/courses/30/lessons/64062
import java.io.*;
import java.util.*;
class Solution {
public int solution(int[] stones, int k) {
int answer = 0;
int left = 0;
int right = Arrays.stream(stones).max().getAsInt();
int mid = 0;
while(left<=right) {
mid = (left+right)/2;
boolean check = isStepStone(mid, stones, k);
//걷널 수 있다면 mid 이상에 못 걷너는 친구가 있다.
if(check) {
answer = mid;
left = mid+1;
}else {
right = mid-1;
}
}
return answer+1;
}
private boolean isStepStone(int mid, int[] stones, int k) {
int[] temp = Arrays.copyOf(stones, stones.length);
// 스톤 제거
for(int i=0; i<stones.length; i++) {
temp[i] -= mid;
}
int index =0;
// k이상 스톤이 비어 있는지 검사
for(int i=0; i<temp.length; i++) {
if(temp[i] <= 0) index++;
else index =0;
if(index == k) return false;
}
return true;
}
public static void main(String[] args) {
int a = new Solution().solution(new int[] {2, 4, 5, 3, 2, 1, 4, 2, 5, 1}, 3);
System.out.println(a);
}
}
정리
연속된 K개의 디딤돌에 적힌 숫자가 모두 0인 구간이 있으면 더 이상 징검다리를 건널 수 없으며, 이를 이용해 이분 탐색하면 문제를 해결할 수 있습니다. 먼저 M번째 친구가 징검다리를 건널 수 있는지 확인하기 위해 M – 1 번째 친구까지 징검다리를 건넌 상황을 구합니다. 이때, M – 1번째 친구까지는 K값에 관계없이 모두 징검다리를 건넜다고 가정합니다. 따라서, 징검다리에 적힌 숫자가 M보다 작다면 숫자가 0이 됐다고 표시해주면 됩니다. 이제 M번째 친구가 징검다리를 건널 수 있는지 확인하기 위해 징검다리에서 0이 연속으로 K개가 나오는 구간이 있는지 확인합니다.
- 0이 연속으로 K개가 나오는 구간이 있는 경우 : M번째 친구는 징검다리를 건널 수 없습니다.
- 또한, M번째 친구보다 뒤에 건너는 친구들은 모두 징검다리를 건널 수 없습니다.
- 따라서 찾아야 하는 답은 0 이상 M – 1 이하인 정수 중 하나입니다.
- 0이 연속으로 K개가 나오는 구간이 없는 경우 : M번째 친구는 징검다리를 건널 수 있습니다.
- 이 경우 첫 번째 ~ M – 1 번째 친구들은 모두 정상적으로 징검다리를 건널 수 있습니다.
'알고리즘 > 프로그래머스(Programmers)' 카테고리의 다른 글
[프로그래머스][월간 코드 챌린지 시즌2][자바] 모두 0으로 만들기 (0) | 2021.04.15 |
---|---|
[프로그래머스][월간 코드 챌린지 시즌2][자바] 괄호 회전하기 (0) | 2021.04.15 |
[프로그래머스][2020 KAKAO BLIND RECRUITMENT] 괄호 변환 (0) | 2021.04.13 |
[프로그래머스][2018 KAKAO BLIND RECRUITMENT][자바] 추석 트래픽 (0) | 2021.04.12 |
[프로그래머스][Level3][자바] 입국심사 (0) | 2021.04.09 |
Comments