🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] 롤케이크 자르기 (JAVA) (0) | 2023.10.30 |
---|---|
[프로그래머스/Lv. 2] 연속된 부분 수열의 합 (JAVA) (1) | 2023.10.30 |
[프로그래머스/Lv. 2] [1차] 캐시 (JAVA) (0) | 2023.10.25 |
[프로그래머스/Lv. 3] 여행경로 (JAVA) (0) | 2023.10.25 |
[프로그래머스/Lv. 2] 124 나라의 숫자 (JAVA) (0) | 2023.10.24 |