Algorithm๐ŸŒŠ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Programmers)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / JAVA] ๋Œ€์ถฉ ๋งŒ๋“  ์žํŒ

์–ด์ œ์‹œ์ž‘ 2025. 7. 7. 20:20

๋ฌธ์ œ ๋งํฌ: https://school.programmers.co.kr/learn/courses/30/lessons/160586
 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


1. ๋ฌธ์ œ ํƒ์ƒ‰

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์žํŒ์ด ์žˆ๊ณ , ๊ฐ ์žํŒ์—๋Š” ์•ŒํŒŒ๋ฒณ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ฑ์žฅํ•จ.
  • ์žํŒ์˜ ๊ฐ ์•ŒํŒŒ๋ฒก์ด ๋ช‡ ๋ฒˆ์งธ๋กœ ๋ˆŒ๋Ÿฌ์•ผ ์ž…๋ ฅ๋˜๋Š”์ง€ ์ฃผ์–ด์ง
  • ์žํŒ์— ์—†๋Š” ๋ฌธ์ž๋Š” -1 ๋ฆฌํ„ด.
  • ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด targets ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, ๊ฐ ๋ฌธ์ž๋ณ„ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ์•ผ ํ•˜๋Š”์ง€ ํ•ฉ์‚ฐํ•ด์„œ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ

 

2. ํ’€์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜

1) ๊ฐ ์•ŒํŒŒ๋ฒณ์˜ ์ตœ์†Œ ํด๋ฆญ ํšŸ์ˆ˜ ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ (Preprocessing)

  • keymap ์˜ ๊ฐ ๋ฌธ์ž์—ด์„ ํƒ์ƒ‰ํ•˜์—ฌ, ํ•ด๋‹น ์•ŒํŒŒ๋ฒณ์ด ๋ช‡ ๋ฒˆ์งธ ์œ„์น˜์— ์žˆ๋Š”์ง€ ๋ชจ๋‘ ํ™•์ธํ•˜๊ณ  → ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’๋งŒ ์ €์žฅ.

์‹œ๊ฐ„ ๋ณต์žก๋„: O(M × L) (M = keymap ๋ฐฐ์—ด ๊ธธ์ด, L = ๊ฐ ๋ฌธ์ž์—ด ๊ธธ์ด)

 

2) ๊ฐ target ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ˆ„๋ฅด๋Š” ํšŸ์ˆ˜ ๊ณ„์‚ฐ

  • ๊ฐ ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž ํ•˜๋‚˜์”ฉ ๋ณด๋ฉด์„œ 1๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ํ…Œ์ด๋ธ”์—์„œ ๋ˆ„๋ฅด๋Š” ํšŸ์ˆ˜ ๊ฐ€์ ธ์˜ด
  • ์—†๋Š” ๋ฌธ์ž๋Š” -1

์‹œ๊ฐ„๋ณต์žก๋„: O(N × T) (N = target ๋ฐฐ์—ด ๊ธธ์ด, T = ๊ฐ target ๋ฌธ์ž์—ด ๊ธธ์ด)

 


3. ์ •๋‹ต ์ฝ”๋“œ 

import java.util.*;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        Map<Integer, Integer> alphaMap = new HashMap<>();
        List<Integer> answer = new ArrayList<>();
        int MAX_VALUE = 101;

        for (int i = 0; i < 26; i++) {
            alphaMap.put(i, 101);
        }

        for (String key : keymap){
            for (int i = 0 ; i < key.length() ; i++){
                char c = key.charAt(i);
                int index = i + 1;
                int int_char = (int) c - 'A';
                if (alphaMap.get(int_char) > index){
                    alphaMap.put(int_char, index);
                }
            }
        }

        for (String target : targets){
            int count = 0;
            for (char c : target.toCharArray()){
                int value = alphaMap.get((int) c - 'A');
                if (value == 101){
                    count = -1;
                    break;
                }
                count += value;
            }
            answer.add(count);
        }

        return answer.stream().mapToInt(Integer::intValue).toArray();
    }
}

 


4. ๋งˆ์น˜๋ฉฐ.

๊ฐ€์žฅ ๋งŽ์ด ์• ๋จน์—ˆ๋˜ ๋ถ€๋ถ„์€ ๋ฌด์—‡์ด์—ˆ์„๊นŒ. List์˜ stream() method์˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋‚ด๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์•˜๋‹ค. java ์–ธ์–ด์— ๋Œ€ํ•œ ๊ณต๋ถ€๋ฅผ ๋” ๋งŽ์ด ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.