Programmers/Lv.1

프로그래머스 Lv.1 - 대충 만든 자판

junnrecorder 2023. 9. 16. 20:52

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 타겟 문자를 하나씩 순회

2. 타겟 문자의 각 글자를 입력할 때, 키맵들 중 가장 적은 횟수로 입력 가능한 횟수를 저장한다.

3. 만약 어느 키맵에서도 그 단어를 만들수가 없다면, 타켓 문자 자체를 못 만들기 때문에 -1을 저장한다.

4. 타겟 문자의 각 글자를 키맵들을 사용해 만들 수 있는 최소 횟수를 구한다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length]; // 답을 저장할 배열의 크기를 미리 지정한다.
        
        for(int i=0; i<targets.length; i++) {
            String target = targets[i]; // targets 배열 안의 문자열을 하나씩 순회
            
            int sum = 0// 문자열의 각 문자마다 자판을 누른 횟수를 합산할 변수를 선언
            
           for(int j=0; j<target.length(); j++) {
                int e = -1// 자판을 누른 횟수 
                char ch = target.charAt(j);
                
                for(String s : keymap) {
                    int idx = s.indexOf(String.valueOf(ch)); 
                    
                    if(idx != -1) { // 자판으로 작성할 문자가 자판에 존재하는 경우
                        if(e == -1) e = idx + 1// e 값에 -1이 아닌 자판에 존재하는 위치를 저장함
                        else if(e > idx + 1) e = idx + 1// 다른 자판에서 더 적은 횟수로 입력이 가능한 경우
                    }
                }
                
                if(e == -1) { // 해당 문자를 자판으로 작성할 수 없으면 그 단어 자체는 성립할 수 없으니 현재 반복문 종료
                    sum = -1;
                    break;
                }
                
                sum += e;
            }
            
            if(sum > 0) answer[i] = sum; // sum이 양수인 경우 자판의 합을 저장
            else answer[i] = -1// 음수인 경우 -1를 저장
        }
        
        return answer;
    }
}
cs