KDLiam

[Programmers : Java] ์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ ๋ณธ๋ฌธ

Problems(Java)/Programmers

[Programmers : Java] ์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ

KDLiam 2025. 10. 17. 14:36

๐ŸŽฏ Programmers 120812 — ์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ

๐Ÿ“Œ ๋ฌธ์ œ ๋งํฌ: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 120812 - ์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ


๐Ÿ“˜ ๋ฌธ์ œ ์š”์•ฝ

์ •์ˆ˜ ๋ฐฐ์—ด array๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€์žฅ ์ž์ฃผ ๋“ฑ์žฅํ•œ ์ˆ˜(์ตœ๋นˆ๊ฐ’)๋ฅผ ๋ฐ˜ํ™˜ํ•˜์‹œ์˜ค.
๋‹จ, ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก 1๏ธโƒฃ ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ํ’€์ด

 
 
class Solution {
    public int solution(int[] array) {
        int[] numCnt = new int[1000]; // ๋นˆ๋„ ์นด์šดํŒ…์šฉ ๋ฐฐ์—ด
        int max = -1;

        // 1๋‹จ๊ณ„: ๊ฐ ์ˆซ์ž์˜ ๋นˆ๋„ ์„ธ๊ธฐ + ์ตœ๋Œ€ ๋นˆ๋„ ์ฐพ๊ธฐ
        for (int i = 0; i < array.length; i++) {
            numCnt[array[i]]++;
            if (numCnt[array[i]] > max) {
                max = numCnt[array[i]];
            }
        }

        // 2๋‹จ๊ณ„: ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ์ง€ ํ™•์ธ
        int cnt = 0;
        int maxIndex = 0;
        for (int i = 0; i < numCnt.length; i++) {
            if (numCnt[i] == max) {
                cnt++;
                maxIndex = i;
            }
            if (cnt > 1) return -1; // ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด -1
        }

        return maxIndex;
    }
}

โœ… ์žฅ์ 

  1. ๋น ๋ฅธ ์†๋„
    • ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ์ง์ ‘ ์ ‘๊ทผํ•˜๋ฏ€๋กœ ํ•ด์‹œ ์—ฐ์‚ฐ์ด ํ•„์š” ์—†์Œ
    • ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N + K)
      (N: ๋ฐฐ์—ด ํฌ๊ธฐ, K: numCnt ๋ฐฐ์—ด ํฌ๊ธฐ = 1000์œผ๋กœ ์ƒ์ˆ˜)
  2. ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ 
    • ๋ณ„๋„์˜ ์ž๋ฃŒ๊ตฌ์กฐ ์—†์ด ๊ธฐ๋ณธ for๋ฌธ์œผ๋กœ๋งŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  3. ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ์—ฐ์†์ ์ด๋ผ ์บ์‹œ ํšจ์œจ์ด ๋†’์Œ

โŒ ๋‹จ์ 

  1. ์ˆซ์ž ๋ฒ”์œ„ ์ œํ•œ
    • int[] numCnt = new int[1000]; ์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ๋ฒ”์œ„๋ฅผ ์•Œ์•„์•ผ ํ•จ
    • ๋งŒ์•ฝ ์ž…๋ ฅ๊ฐ’์ด 10000์ด๋‚˜ ์Œ์ˆ˜๋ผ๋ฉด ์ฝ”๋“œ ์ˆ˜์ • ํ•„์š”
  2. ํ™•์žฅ์„ฑ ๋ถ€์กฑ
    • ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋‚˜ ๋ฒ”์œ„๊ฐ€ ๊ฐ€๋ณ€์ ์ด๋ฉด ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€
  3. ์˜๋ฏธ ํ•ด์„์ด ์–ด๋ ค์›€
    • numCnt[์ˆซ์ž]++ ๊ตฌ์กฐ๋Š” ์ดˆ๋ณด์ž์—๊ฒŒ ์ง๊ด€์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

๐Ÿ’ก 2๏ธโƒฃ HashMap ๊ธฐ๋ฐ˜ ํ’€์ด

 
import java.util.*;

class Solution {
    public int solution(int[] array) {
        Map<Integer, Integer> cntMap = new HashMap<>();
        
        // ๊ฐ ์ˆซ์ž์˜ ๋นˆ๋„ ์„ธ๊ธฐ
        for (int num : array) {
            cntMap.put(num, cntMap.getOrDefault(num, 0) + 1);
        }

        int highestValue = -1;
        int highestIndex = -1;
        boolean flag = false;
        
        // ์ตœ๋นˆ๊ฐ’ ์ฐพ๊ธฐ
        for (Map.Entry<Integer, Integer> entry : cntMap.entrySet()) {
            if (entry.getValue() > highestValue) {
                highestValue = entry.getValue();
                highestIndex = entry.getKey();
                flag = false;
            } else if (entry.getValue() == highestValue) {
                flag = true;
            }
        }

        return flag ? -1 : highestIndex;
    }
}

โœ… ์žฅ์ 

  1. ๋ฒ”์œ„ ์ œํ•œ ์—†์Œ
    • ์ˆซ์ž์˜ ํฌ๊ธฐ๊ฐ€ ์ปค๋„, ์Œ์ˆ˜์—ฌ๋„, ์ค‘๋ณต์ด ๋งŽ์•„๋„ ๋ฌธ์ œ์—†์Œ
  2. ๊ฐ€๋…์„ฑ ์ข‹์Œ
    • cntMap.getOrDefault(num, 0) ๋“ฑ ์ž๋ฐ”์Šค๋Ÿฝ๊ณ  ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•
  3. ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ
    • ๋ฌธ์ž์—ด, ์Œ์ˆ˜, ๊ฐ์ฒด ๋“ฑ ์–ด๋–ค ํƒ€์ž…์œผ๋กœ๋„ ํ™•์žฅ ๊ฐ€๋Šฅ
    • ์ดํ›„ ์ •๋ ฌ์ด๋‚˜ ๋‹ค๋ฅธ ํ†ต๊ณ„ ์ฒ˜๋ฆฌ๋„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

โŒ ๋‹จ์ 

  1. ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆผ
    • HashMap์˜ ํ•ด์‹œ ์—ฐ์‚ฐ ๋ฐ ์˜คํ† ๋ฐ•์‹ฑ ๋น„์šฉ์ด ์žˆ์Œ
    • ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N) (ํ‰๊ท ), ๋‹จ ํ•ด์‹œ์ถฉ๋Œ ์‹œ O(N^2)๊นŒ์ง€ ๊ฐ€๋Šฅ
  2. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€
    • ๊ฐ์ฒด ๊ตฌ์กฐ(HashMap Entry ๋“ฑ)๋กœ ์ธํ•ด ๋ฐฐ์—ด๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„
  3. ๋น„๊ต์  ๋ณต์žกํ•œ ๊ตฌ๋ฌธ
    • ์ดˆ๋ณด์ž ์ž…์žฅ์—์„œ entrySet()์ด๋‚˜ getOrDefault()๊ฐ€ ์ƒ์†Œํ•  ์ˆ˜ ์žˆ์Œ

โš™๏ธ 3๏ธโƒฃ ๋‘ ์ฝ”๋“œ์˜ ๋น„๊ต

๊ตฌ๋ถ„๋ฐฐ์—ด ๊ธฐ๋ฐ˜HashMap ๊ธฐ๋ฐ˜
์‹œ๊ฐ„ ๋ณต์žก๋„ O(N + K) (์ƒ์ˆ˜๋ฐฐ ๋น ๋ฆ„) O(N) (ํ‰๊ท )
๊ณต๊ฐ„ ๋ณต์žก๋„ O(K) (1000๊ฐœ ๊ณ ์ •) O(N) (์ž…๋ ฅ ํฌ๊ธฐ๋งŒํผ)
์ž…๋ ฅ ๋ฒ”์œ„ ์ œํ•œ ์žˆ์Œ (0~999 ๊ฐ€์ •) ์—†์Œ
๊ฐ€๋…์„ฑ ์ค‘๊ฐ„ (index ์ง์ ‘ ๊ด€๋ฆฌ) ๋†’์Œ (๋ช…์‹œ์  ๊ตฌ์กฐ)
ํ™•์žฅ์„ฑ ๋‚ฎ์Œ ๋†’์Œ
๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ์ข‹์Œ ๋‚˜์จ
์ฝ”ํ…Œ ์ ํ•ฉ๋„ โœ… ๋น ๋ฅด๊ณ  ๋‹จ์ˆœ (์ ํ•ฉ) โšช ์œ ์—ฐํ•˜์ง€๋งŒ ์‚ด์ง ๋ฌด๊ฒ์Œ

๐Ÿงพ 4๏ธโƒฃ ํ‰๊ฐ€ ๋ฐ ๊ฒฐ๋ก 

์ƒํ™ฉ์ถ”์ฒœ ๋ฐฉ์‹
โœ… ์ž…๋ ฅ๊ฐ’์ด ์ž‘๊ณ  ๋ฒ”์œ„๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์Œ ๋ฐฐ์—ด ๊ธฐ๋ฐ˜์ด ์••๋„์ ์œผ๋กœ ๋น ๋ฆ„
โš™๏ธ ์ž…๋ ฅ๊ฐ’์ด ํด ์ˆ˜๋„ ์žˆ๊ณ  ๋ฒ”์œ„๋ฅผ ๋ชจ๋ฆ„ HashMap ๊ธฐ๋ฐ˜์ด ์•ˆ์ „ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด
๐Ÿ“Š ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ (์„ฑ๋Šฅ ์ค‘์‹ฌ)
๐Ÿงฉ ์‹ค๋ฌด/ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ HashMap ๊ธฐ๋ฐ˜ (๊ฐ€๋…์„ฑ ์ค‘์‹ฌ)

โœจ ๊ฒฐ๋ก  ์š”์•ฝ

๐Ÿ”น ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋Š” “์ž‘๊ณ  ํ™•์‹คํ•œ ์ž…๋ ฅ”์ผ ๋•Œ ์ตœ๊ณ  ํšจ์œจ์„ ๋‚ธ๋‹ค.
๐Ÿ”น HashMap ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋Š” “์œ ์—ฐํ•˜๊ณ  ๋ฒ”์œ„๊ฐ€ ๋ถˆํ™•์‹คํ•œ ์ž…๋ ฅ”์— ๊ฐ•ํ•˜๋‹ค.
๐Ÿ”น **์„ฑ๋Šฅ ์ค‘์‹ฌ(์ฝ”ํ…Œ)**์ด๋ผ๋ฉด ๋ฐฐ์—ด,
๐Ÿ”น **์œ ์ง€๋ณด์ˆ˜ ์ค‘์‹ฌ(์‹ค๋ฌด)**์ด๋ผ๋ฉด HashMap์„ ์„ ํƒํ•˜์ž.


๐Ÿ’ฌ Tip:
๋งŒ์•ฝ ์ˆซ์ž ๋ฒ”์œ„๋ฅผ ๋ชจ๋ฅธ๋‹ค๋ฉด,
HashMap์œผ๋กœ ์ž‘์„ฑํ•œ ๋’ค ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•ด์ง€๋Š” ์ƒํ™ฉ์—์„œ๋งŒ ๋ฐฐ์—ด๋กœ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋ฒ ์ŠคํŠธ ์ „๋žต์ž…๋‹ˆ๋‹ค.