ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

[๋ฌธ์ œ]

https://school.programmers.co.kr/learn/courses/30/lessons/64062

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

[ํ’€์ด]

๋‹จ์ˆœํžˆ ์นœ๊ตฌ๋ฅผ ํ•œ๋ช…์”ฉ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์ด๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๋‹ˆ, ์ •ํ™•์„ฑ์€ ํ†ต๊ณผํ•˜์˜€์ง€๋งŒ ํšจ์œจ์„ฑ์—์„œ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œ์ผœ ๋ณด๊ธฐ ์œ„ํ•ด ์ตœ์†Œ๊ฐ’ min์„ ๊ตฌํ•ด, 1์นธ์”ฉ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นœ๊ตฌ๋“ค์„ ๊ฑด๋„Œํ›„, ๋‚˜๋จธ์ง€๋ฅผ ๊ฑด๋„ˆ๊ฒŒ ํ•ด๋ณด์•˜์ง€๋งŒ ์—ญ์‹œ๋‚˜ ํšจ์œจ์„ฑ์—์„œ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•ด ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

https://tech.kakao.com/2020/04/01/2019-internship-test/

 

2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ•ด์„ค

"2019๋…„ ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ" ๊ณต๊ฐœ ์ฑ„์šฉ์„ ์œ„ํ•œ 1์ฐจ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์ง€๋‚œ 2019๋…„ 11์›” 9์ผ ์˜คํ›„ 2์‹œ๋ถ€ํ„ฐ 6์‹œ๊นŒ์ง€ ์ด 4์‹œ๊ฐ„์— ๊ฑธ์ณ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. '19๋…„ ์‹ ์ž…๊ณต์ฑ„ 1์ฐจ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์‹œ์— 7๋ฌธ์ œ๊ฐ€

tech.kakao.com

ํ’€์ด๋ฅผ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ ์ด์ง„ํƒ์ƒ‰์œผ๋กœ ํ’€์ดํ•˜๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] ๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค๋ฉด ์ตœ์†Œ๊ฐ’ left๋Š” 1, ์ตœ๋Œ€๊ฐ’ right๋Š” 5๋กœ ์„ธํŒ…๋ฉ๋‹ˆ๋‹ค.

while๋ฌธ์„ ํ†ตํ•ด ์ด์ง„ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ, mid = (right + left)/2 ๊ฐ€ ๋˜๊ณ  ๊ฐ mid๋งˆ๋‹ค cross()๋ฅผ ํ†ตํ•ด ํ•ด๋‹น mid ๊ฐ’์œผ๋กœ ๊ฑด๋„์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ mid๋ฅผ ๊ฐฑ์‹ ํ•ด์ค๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ mid๋กœ ๊ฑด๋„ ์ˆ˜ ์žˆ๋‹ค๋ฉด mid๋ณด๋‹ค ์ž‘์€ ๊ฐ’์œผ๋ก  ๋ชจ๋‘ ๊ฑด๋„์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ left = mid + 1์„, mid๋กœ ๊ฑด๋„์ˆ˜ ์—†๋‹ค๋ฉด ํ•ด๋‹น mid๋ณด๋‹ค ํฐ๊ฐ’์œผ๋กœ๋Š” ๊ฑด๋„ ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ right = mid -1 ๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

1) mid = 3  -> ๊ฑด๋„ ์ˆ˜ ์žˆ์Œ -> left =4๋กœ ๊ฐฑ์‹ 

2) mid = 4 -> ๊ฑด๋„ ์ˆ˜ ์—†์Œ -> right = 3์œผ๋กœ ๊ฐฑ์‹ 

3) left > right ์ด๋ฏ€๋กœ ์ด๋ถ„ํƒ์ƒ‰ ์ข…๋ฃŒ

 

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ๋‚˜๋ฉด right์— ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

[์ฝ”๋“œ]

class Solution {
    public int solution(int[] stones, int k) {
        int answer = 0;
        // ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’ ์ฐพ๊ธฐ
        int left = stones[0];
        int right = stones[0];
        for(int i=1;i<stones.length;i++) {
            if(left > stones[i]) {
                left = stones[i];
            }
            if(right < stones[i]) {
                right = stones[i];
            }
        }
    
        // ์ด๋ถ„ํƒ์ƒ‰
        while(left <= right) {
            int mid = (left + right)/2;
            if(cross(stones, k, mid)) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        answer = right;
        return answer;
    }
    public static boolean cross(int[] stones, int k, int m) {
        int cnt = 0;
        for(int i=0;i<stones.length;i++) {
            if(stones[i] - m < 0) {
                cnt++;
            } else {
                cnt = 0;
            }
            if(cnt == k) {
                return false;
            }
        }
        return true;
    }
}