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

๐Ÿš€ Algorithm/PGS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ (JAVA)

๐Ÿ’ก ๋ฌธ์ œ 


์ตœ๋นˆ๊ฐ’์€ ์ฃผ์–ด์ง„ ๊ฐ’ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ๋‚˜์˜ค๋Š” ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ •์ˆ˜ ๋ฐฐ์—ด array๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ๋นˆ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”. ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด -1์„ return ํ•ฉ๋‹ˆ๋‹ค.

 

 

์‚ฌ์šฉ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ :

1. ์ž…๋ ฅ๋œ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์›์†Œ์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜(๋นˆ๋„์ˆ˜)๋ฅผ Map์— ์ €์žฅํ•œ๋‹ค.

2. Map์—์„œ ์ตœ๋นˆ๊ฐ’์„ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋•Œ, ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์นด์šดํŠธ๋ฅผ ์œ„ํ•ด ์ตœ๋นˆ๊ฐ’์„ ์ฐพ์„ ๋•Œ๋Š” ๊ฐ key-value ์Œ์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค. ๊ฐ ์›์†Œ๋ฅผ ํ‚ค(key)๋กœ, ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ๊ฐ’(Value)๋กœ ์ €์žฅํ•˜์—ฌ, ์ˆœํšŒ๊ฐ€ ๋๋‚œ ํ›„ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ์›์†Œ๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)

- ์ž…๋ ฅ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ n์ด๋ผ๊ณ  ํ•  ๋•Œ, ์ž…๋ ฅ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ์š”์†Œ์˜ ๋นˆ๋„์ˆ˜๋ฅผ Map์— ์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.

- HashMap์„ ์ด์šฉํ•ด ๊ฐ ์›์†Œ์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๋Š” ๋ฐ์—๋„ O(n)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค. (์ตœ๋นˆ๊ฐ’์„ ์ฐพ๋Š” ๊ณผ์ •)

- ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๋ฉฐ, ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๐Ÿ– ๋‚ด ๋‹ต์•ˆ


public static int solution2(int[] arr) {
        // ๋นˆ๋„์ˆ˜๋ฅผ ์ €์žฅํ•  Map
        Map<Integer, Integer> freqMap = new HashMap<>();

        // ๊ฐ€์žฅ ๋†’์€ ๋นˆ๋„์ˆ˜์™€ ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜
        int maxFreq = 0;
        int mode = -1; // ์ตœ๋นˆ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ -1 ๋ฐ˜ํ™˜

        // ์ž…๋ ฅ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ๋นˆ๋„์ˆ˜ ๊ณ„์‚ฐ
        for (int i: arr) {
            // ํ˜„์žฌ ์š”์†Œ์˜ ๋นˆ๋„์ˆ˜ ๊ณ„์‚ฐ
            int freq = freqMap.getOrDefault(i, 0) + 1;

            // ๋นˆ๋„์ˆ˜ Map์— ์ €์žฅ
            freqMap.put(i, freq);

            // ํ˜„์žฌ ์š”์†Œ์˜ ๋นˆ๋„์ˆ˜๊ฐ€ ์ตœ๋นˆ๊ฐ’์˜ ๋นˆ๋„์ˆ˜๋ณด๋‹ค ๋†’์€ ๊ฒฝ์šฐ
            if (freq > maxFreq) {
                // ์ตœ๋นˆ๊ฐ’ ๋นˆ๋„์ˆ˜์™€ ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ ์—…๋ฐ์ดํŠธ
                maxFreq = freq;
                mode = i;
            } else if (freq == maxFreq) {
                mode = -1; // ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒจ์šฐ -1 ๋ฐ˜ํ™˜
            }
        }

        return mode;
    }

    public static void main(String[] args) {
        // ์ž…๋ ฅ ๋ฐฐ์—ด
        int[] arr = {1,2,3,4,4,4,5,5,6,6};

        // ์ตœ๋นˆ๊ฐ’ ์ฐพ๊ธฐ
        int mode = solution2(arr);
        System.out.println("์ตœ๋นˆ๊ฐ’: "+mode);
    }
}

 

 

for๋ฌธ์œผ๋กœ ๊ตฌํ˜„

public int solution1(int[] sides) {
        // ์ตœ๋นˆ๊ฐ’, ๊ฐ’๋ณ„ ๊ฐฏ์ˆ˜ ์ €์žฅ, ์ตœ๋Œ€๊ฐ’
        int[] max = new int[1001];
        int answer = 0; // ์ตœ๋นˆ๊ฐ’

        // ์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ
        for (int i : sides) {
            if (sides.length != 1) {
                if (sides[i] == sides[i + 1]) {
                    //max[sides[i]];

                }
            }
            else { answer = sides[i]; }
        }

        // ์ตœ๋นˆ๊ฐ’ ์ค‘๋ณต ํ™•์ธ
        int temp = 0;
        for(int i : sides) {
           // if(max[i] == frequent[j]) temp++;
            if(temp > 1) answer = -1;
        }
        return answer;
}