๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

TIL, WIL/TIL๐Ÿ“˜

10. 16 TIL : ์ฐธ์กฐ ๋ณต์‚ฌ์™€ ๊ฐ’ ๋ณต์‚ฌ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ ์ฐจ์ด ์ผ€์ด์Šค

728x90

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

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

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

programmers.co.kr

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค : ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ˆ˜์—ด ๋ณ€ํ™˜ํ•˜๊ธฐ 2
์ด ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€..
 
์ฒ˜์Œ ์‹œ๋„ํ•œ ์ฝ”๋“œ : 

class Solution {
    public int solution(int[] arr) {
        int answer = 0;

        int[] arrTmp2 = new int[arr.length];
        int[] arrTmp = new int[arr.length];
        System.arraycopy(arrTmp, 0, arrTmp2,0, arrTmp.length);

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] >= 50 && arr[i] % 2 == 0) {
                arr[i] /= 2;
            } else if (arr[i] <= 50 && arr[i] % 2 != 0) {
                arr[i] = arr[i] * 2 + 1;
            }
        }

        System.arraycopy(arr, 0, arrTmp, 0, arr.length);

        while (answer < arr.length - 1 && arrTmp2[answer] != arrTmp[answer]) {
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] >= 50 && arr[i] % 2 == 0) {
                    arr[i] /= 2;
                } else if (arr[i] <= 50 && arr[i] % 2 != 0) {
                    arr[i] = arr[i] * 2 + 1;
                }
            }

            System.arraycopy(arr, 0, arrTmp,0, arr.length);

            for (int i = 0; i < arrTmp.length; i++) {
                if (arrTmp[i] != arrTmp2[i]) {
                    answer++;
                    break;
                }
            }
        }

        return answer;
    }
}

์ด๋ ‡๊ฒŒ ํ–ˆ์„ ๋•Œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์—์„œ ์ผ๋ถ€๋งŒ ํ†ต๊ณผํ•˜๋Š” ์ด์œ ๋ฅผ ์ฐพ๋‹ค๊ฐ€
 
๊ฐ’ ๋ณต์‚ฌ์™€ ์ฐธ์กฐ ๋ณต์‚ฌ์— ๋Œ€ํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค
 
1. ๊ฐ’ ๋ณต์‚ฌ
๊ฐ’ ๋ณต์‚ฌ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค
- ๋ณต์‚ฌ๋œ ๋ณ€์ˆ˜๋Š” ๋…๋ฆฝ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์›๋ณธ ๋ณ€์ˆ˜์˜ ๋ณ€๊ฒฝ์ด ๋ณต์‚ฌ๋ณธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
- ๊ฐ’ ๋ณต์‚ฌ๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์œ ํ˜• (์ •์ˆ˜, ๋ถ€๋™ ์†Œ์ˆ˜์ , ๋ฌธ์ž ๋“ฑ)์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค
- ๊ฐ’ ๋ณต์‚ฌ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณต์‚ฌ๋จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ์— ๋‘ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค
 
2. ์ฐธ์กฐ ๋ณต์‚ฌ
์ฐธ์กฐ ๋ณต์‚ฌ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์ฐธ์กฐ ์œ ํ˜•์ผ ๋•Œ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค
๋ณต์‚ฌ๋œ ๋ณ€์ˆ˜์™€ ์›๋ณธ ๋ณ€์ˆ˜๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, ์›๋ณธ ๋ณ€์ˆ˜์˜ ๋ณ€๊ฒฝ์ด ๋ณต์‚ฌ๋ณธ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค
์ฐธ์กฐ ๋ณต์‚ฌ๋Š” ๊ฐ์ฒด, ๋ฐฐ์—ด, ์ปฌ๋ ‰์…˜ ๋“ฑ๊ณผ ๊ฐ™์€ ์ฐธ์กฐ ์œ ํ˜•์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค
์ฐธ์กฐ ๋ณต์‚ฌ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋ณต์‚ฌ๋จ์œผ๋กœ์จ ๋‘ ๋ณ€์ˆ˜๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค
 
๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ System.arraycopy ๋ฉ”์„œ๋“œ๋Š” ์ฐธ์กฐ ๋ณต์‚ฌ ๋ฉ”์„œ๋“œ๋กœ, ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์›๋ณธ ๋ฐฐ์—ด์˜ ์ฐธ์กฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ๋ฐ˜๋ณต๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค!

+ ๊ฐ’ ๋ณต์‚ฌ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๊ฐ€ ๋ณต์žกํ•ด์งˆ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋” ๋งŽ๊ฒŒ ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์‹œ ์ฐธ๊ณ ํ•  ๊ฒƒ

 
=> Arrays.copyOf (๊ฐ’ ๋ณต์‚ฌ) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ์ •๋‹ต

import java.util.Arrays;

class Solution {
    public int solution(int[] arr) {
        int[] arrTmp = Arrays.copyOf(arr, arr.length);
        int[] arrTmp2;

        int answer = 0;
        do {
            arrTmp2 = Arrays.copyOf(arrTmp, arrTmp.length);

            for (int i = 0; i < arrTmp.length; i++) {
                if (arrTmp[i] >= 50 && arrTmp[i] % 2 == 0) {
                    arrTmp[i] /= 2;
                } else if (arrTmp[i] < 50 && arrTmp[i] % 2 != 0) {
                    arrTmp[i] = arrTmp[i] * 2 + 1;
                }
            }
            answer++;

        } while (!Arrays.equals(arrTmp, arrTmp2));

        return answer - 1;
    }
}
728x90