코테/프로그래머스

[프로그래머스/Lv. 1] 대충 만든 자판(JAVA)

imname1am 2023. 10. 26. 01:38
반응형

🔺 문제

 

프로그래머스

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

programmers.co.kr

 

 

🔺 코드

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
38
39
40
import java.util.*;
 
class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        
        int[] answer = new int[targets.length];
               
        // 1. Character별 최소값을 HashMap에 입력하기
        Map<Character, Integer> map = new HashMap<>();  // <Character, 최솟값>
        for(String key : keymap) {
            for(int i = 0 ; i < key.length() ; i++) {
                char c = key.charAt(i);
                
                if(!map.containsKey(c) || i < map.get(c)) {
                    map.put(c, i + 1);
                }
            }
        }
        
        // 2. targets를 탐색해 최소값 찾기
        for(int i = 0 ; i < targets.length ; i++) {
            int cnt = 0;
            
            for(int j = 0 ; j < targets[i].length() ; j++) {
                char c = targets[i].charAt(j);
                
                if(!map.containsKey(c)) {
                    cnt = 0;
                    break;
                }
                else {
                    cnt += map.get(c);
                }
            }
            answer[i] = (cnt == 0) ? - 1 : cnt;
        }        
        
        return answer;
    }
}
cs

 

 

🧩  해결 아이디어

• HashMap<Character, Integer>

1. keymap을 활용해 알파벳 별 가장 빨리 등장하는 인덱스 값을 HashMap에 입력한다.

2. targets를 활용해 최솟값을 찾는다.

 

 

 


🔺 다른 풀이들

- 그림 이용한 상세한 과정 설명 (복습용). 

 

프로그래머스 - 대충 만든 자판 (자바, JAVA)

문제 링크 문제 설명 휴대폰의 자판은 컴퓨터 키보드 자판과는 다르게 하나의 키에 여러 개의 문자가 할당될 수 있습니다. 키 하나에 여러 문자가 할당된 경우, 동일한 키를 연속해서 빠르게 누

hy-ung.tistory.com

 

- 이게 가장 깔끔한 풀이 같다. 다음엔 이렇게 풀어야지

 

[프로그래머스] 대충 만든 자판 Lv1 JAVA [해시][엄탱]

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

tang25.tistory.com


💬 느낀 점

첨엔 3차원 배열로 풀려고 했는데 어디서 잘못되었는지 TC1이 통과하지 못 해 포기하고

다른 분들의 풀이를 확인했다.

틀린 코드
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
38
// 틀린 코드
import java.util.*;
 
class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        
        for(int i = 0 ; i < targets.length ; i++) {
            int minPress = 0;
            
            for(int j = 0 ; j < targets[i].length() ; j++) {    // ABCD
                char tmp = targets[i].charAt(j);
                boolean exists = false;
                int minIdx = Integer.MAX_VALUE;
                
                for(int k = 0 ; k < keymap.length ; k++) {   
                    if(keymap[k].contains(String.valueOf(tmp))) {
                        minIdx = Math.min(minIdx, keymap[k].indexOf(tmp));
                        exists = true;
                        break;                        
                    }
                }
                
                if(!exists) {
                    minPress = -1;
                    break;
                }
                else {
                    minPress += (minIdx + 1);
                }
            }                
            
            answer[i] = minPress;
        }
        
        return answer;
    }
}
cs

 

 

Map 내가 제일 좋아하는 자료구조인데 이렇게 생각을 못 해내다니....

담엔 꼭 풀어줄게,,,,ㅠ

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

[프로그래머스] 대충 만든 자판 (JAVA)

keymap을 사용하여 Character 별 최소값을 HashMap에 입력하며,targets을 탐색하여 최소값을 찾는다. (키 값이 없을때는 -1 break)https://school.programmers.co.kr/learn/courses/30/lessons

velog.io

 

반응형