๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค : ๋Œ€์ถฉ๋งŒ๋“ ์žํŒ(56/Lv3)

by sh119 2025. 2. 12.

๋ฌธ์ œ) ๋Œ€์ถฉ๋งŒ๋“ ์žํŒ

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

 

keymap์— ์žํŒ ๊ทœ์น™์ด, targets์— ์ณ์•ผํ•˜๋Š” String๊ฐ’๋“ค์ด ๋“ค์–ด์˜จ๋‹ค.

์ด๊ฒƒ์„ ์ตœ์†Œํ•œ์„ ์ณ์„œ ๋ช‡ ๋ฒˆ๋งŒ์— targets์„ ์น  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜ํ•œ๋‹ค (์น  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ -1๋ฐ˜ํ™˜)

 

๋‚˜์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ๋ฐฐ์—ด์— A~Z๊นŒ์ง€ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋งŒ์— ๋„๋‹ฌํ•˜๋Š”์ง€ ์ €์žฅ ํ•œ ๋’ค alphabetCount๋ฐฐ์—ด์— ๋ฏธ๋ฆฌ ์ €์žฅํ•œ๋’ค,

target์—์„œ ๊ทธ ๋ฐฐ์—ด๊ฐ’์„ ๋ณด๋ฉฐ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅด๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๊ทธ๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ ์„ฑ๊ณต์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        int[] alphabetCount = new int[26];
        
        // keymap์— ๋Œ€ํ•œ alphabetCount ๋ฐฐ์—ด์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์—ฌ 
        // ๊ฐ ์•ŒํŒŒ๋ฒณ ๋งˆ๋‹ค ์ตœ์†Œ์˜ ๊ฒฝ์šฐ๋กœ ๋„๋‹ฌํ•˜๋Š” ์ˆ˜๋ฅผ ์ €์žฅํ•ด ๋†“๋Š”๋‹ค. 
        for(int k = 0; k < keymap.length; k++){
            String s = keymap[k];
            for(int i = 0; i < s.length(); i++){
                int location = (int) s.charAt(i) - 65;
                if(alphabetCount[location] == 0 
                   || alphabetCount[location] > i + 1){
                    alphabetCount[location] = i + 1;
                }
            }
        }
        
        // targets๋ฐฐ์—ด์„ ์ด์ค‘for๋ฌธ์„ ๋Œ๋ ค alphabetCount์—์„œ ๋ฐ”๋กœ ๊ฐ’์„ ๊บผ๋‚ด์™€ sum์— ๋‹ค ๋”ํ•œ๋‹ค.
        for(int i=0; i<targets.length; i++){
            int sum = 0;
            for(int j=0; j<targets[i].length(); j++){
                // 0์ธ ๊ฒฝ์šฐ๋Š” ์•ŒํŒŒ๋ฒณ์ด keymap์— ์—†๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•œ๋‹ค. 
                if(alphabetCount[(int) targets[i].charAt(j) - 65] == 0){
                    sum = -1; 
                    break;
                }
                sum += alphabetCount[(int) targets[i].charAt(j) - 65];
            }
            answer[i] = sum;
        }
        
        return answer;
    }
}