๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

[Java] ํˆฌํฌ์ธํ„ฐ | ๋ฐฑ์ค€ 1253 ์ข‹๋‹ค ๋ณธ๋ฌธ

๋ฌธ์ œ ํ•ด๊ฒฐ (PS)/์ฝ”ํ…Œ TIL

[Java] ํˆฌํฌ์ธํ„ฐ | ๋ฐฑ์ค€ 1253 ์ข‹๋‹ค

9taetae9 2024. 11. 7. 08:28
728x90

https://www.acmicpc.net/problem/1253

 

์ ‘๊ทผ ๋ฐฉ๋ฒ•

ํˆฌํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์ˆ˜์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ณ  ๊ทธ ํ•ฉ์ด ํƒ€๊ฒŸ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€๋ฅผ ํ™•์ธ

์ด๋ฅผ ์œ„ํ•ด ๋ฐฐ์—ด์˜ ์ •๋ ฌ์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•จ

Arrays.sort(arr);

int count = 0;
for(int i=0; i<arr.length; i++){
    if(isGoodNumber(arr[i], i))
        count++;
}

 

๋ฐฐ์—ด ์ •๋ ฌ ์ดํ›„ ํ•ด๋‹น ํƒ€๊ฒŸ ๋„˜๋ฒ„๊ฐ€ ๋ฐฐ์—ด ๋‚ด์˜ ๋‘์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜(์ข‹์€ ์ˆ˜)์ธ์ง€ ํ™•์ธํ•˜๋Š” isGoodNumber(int target, int target_idx) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ข‹์€ ์ˆ˜์ผ ๊ฒฝ์šฐ(true) count++ํ•˜์—ฌ ์ข‹์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

 

isGoodNumber ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

๋‹จ์ˆœํžˆ ๋ฐฐ์—ด ๋‚ด์˜ ๋‘ ์ˆ˜๊ฐ€ ๋ฐฐ์—ด ๋‚ด์˜ ํƒ€๊ฒŸ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ์ง€๋งŒ ํ™•์ธํ•œ๋‹ค๋ฉด, ๋‘์ˆ˜์˜ ํ•ฉ์ด ํƒ€๊ฒŸ ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ return true, ํƒ€๊ฒŸ ๊ฐ’ ๋ณด๋‹ค ํด ๊ฒฝ์šฐ right ํฌ์ธํ„ฐ 1 ๊ฐ์†Œ,ํƒ€๊ฒŸ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ left ํฌ์ธํ„ฐ 1์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ left๋‚˜ right ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ˆ˜์— ํƒ€๊ฒŸ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ํƒ€๊ฒŸ ๊ฐ’์ด ๋‹ค๋ฅธ ๋‘ ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด์•ผํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•œ๋‹ค.

์ฆ‰, ํƒ€๊ฒŸ ๊ฐ’์€ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋ฉด ์•ˆ๋œ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜์ง€ ์œ„ํ•ด, leftํฌ์ธํ„ฐ์™€ right ํฌ์ธํ„ฐ๊ฐ€ ํƒ€๊ฒŸ ๊ฐ’๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ๋ฅผ ์ฒดํฌํ•œ๋‹ค. 

๋งŒ์•ฝ left ํฌ์ธํ„ฐ๊ฐ€ ํƒ€์ผ“์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์„ ๊ฒฝ์šฐ left++ ํ›„ continue, right ํฌ์ธํ„ฐ๊ฐ€ ํƒ€๊ฒŸ์„ ๊ฐ€๋ฆฌํ‚ฌ ๊ฒฝ์šฐ right--ํ›„ continue ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ํƒ€๊ฒŸ์„ ์ œ์™ธํ•œ ๋‘์ˆ˜์˜ ํ•ฉ์ด ํƒ€๊ฒŸ ๊ฐ’๊ณผ ๊ฐ™์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

private static boolean isGoodNumber(int target, int target_idx){
    int left = 0; int right = N-1;

    while(left < right){
        if(left == target_idx){
            left++;
            continue;
        }
        
        if(right == target_idx){
            right--;
            continue;
        }

        int currentSum = arr[left] + arr[right];

        if(currentSum == target) 
            return true;
        
        if(currentSum > target){
            right--; continue;
        }
        left++;
    }
    
    return false;
}

 

 

์ด ๋ฌธ์ œ๊ฐ€ ๋‚ฎ์€ ์ •๋‹ต๋ฅ ๊ณผ ์ƒ๊ฐ๋ณด๋‹ค ๋†’์€ ๋‚œ์ด๋„๋กœ ํ‰๊ฐ€๋˜๋Š” ์ด์œ ๊ฐ€ ์žˆ์„ํ…๋ฐ ์•„์ง ์™œ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๋ญ”๊ฐ€ ์‰ฝ๊ฒŒ ํ’€๋ ค ์ข€ ์ฐ์ฐํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์งˆ๋ฌธ๋“ค์„ ์ฐพ์•„๋ณด๊ณ  ๋‚ด๊ฐ€ ๊ณ ๋ฏผํ•˜์ง€ ์•Š์•˜๋˜ ๋ถ€๋ถ„์„ ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.

728x90