- 대충 만든 자판 문제
https://school.programmers.co.kr/learn/courses/30/lessons/160586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 풀이
걸린 시간 : 1시간 40분
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] result = new int[targets.length];
HashMap<String, Integer> keyMap = new HashMap<>();
HashSet<String> set = new HashSet<>();
for(int i = 0; i < keymap.length; i++){
for(String s : keymap[i].split("")){
set.add(s);
}
}
for(int i = 0; i < keymap.length; i++){
for(String s : set){
if(!keyMap.containsKey(s)){
keyMap.put(s, keymap[i].indexOf(s) + 1);
} else {
if(keyMap.get(s) == 0){
keyMap.put(s, keymap[i].indexOf(s) + 1);
} else if(keymap[i].indexOf(s) + 1 != 0 && keyMap.get(s) > keymap[i].indexOf(s) + 1){
keyMap.put(s, keymap[i].indexOf(s) + 1);
}
}
}
}
for(int i = 0; i < targets.length; i++){
int count = 0;
for(String s : targets[i].split("")){
if(!keyMap.containsKey(s)){
count = 0;
break;
} else {
count += keyMap.get(s);
}
}
if(count == 0){
result[i] = -1;
} else {
result[i] = count;
}
}
return result;
}
}
일단 map을 통해 계산을 한다는 접근은 좀 잘한것이라고 생각한다.
시작 후 30분 지났을 때, 첫 풀이를 써내고 테스트 성공 후 제출했다.
다 맞는가 싶더니, 밑에서 실패가 떴다...
너무 풀이가 길었다고 생각해서 다시 고칠려니 엄두가 안났다.
그리고 이때까지 풀었던 문제들보다 풀이가 길어,
이건 아니다 싶어 어떻게든 줄이기 위해 많은 시간을 썼다.
1시간 15분즈음이 되었을 때,
나는 무조건 이건 Map을 서야 한다고 결론 짓고,
처음 풀이와 비슷하게 다시 풀었다.
그런데 마지막 코드를 쓸 때쯤, 내 첫 코드의 문제점을 알게되었다.
나는 처음 풀이에선 그냥 Map에 없으면 더하지 않고 지나가게 하고,
for문이 끝나고 0이면 -1이라고 했었다.
다시 생각하니, Map에 있는 단어와 없는 단어가 섞여 있으면
count는 0이 될 수 없기에 틀린 것이었다.
바로 그것을 고쳤고, 무사히 끝낼 수 있게 되었다.
코드를 쓰면서 어떤 부분을 놓치고 있는지를 파악하는 능력을 길러야 한다.
- 배운 점
1. String객체명.indexOf()는 없을 시 -1을 return 한다.
2. Map은 put, List와 Set은 add
3. Map객체명.containsKey(), Map객체명.get()
'코딩테스트 - Java' 카테고리의 다른 글
| 크레인 인형뽑기 게임 - level1 (3) | 2024.09.26 |
|---|---|
| 문자열 나누기 - Level1 (3) | 2024.09.25 |
| 지폐접기 - level1 (2) | 2024.09.23 |
| 2016년, 옹알이(2) - level1 (1) | 2024.09.22 |
| 기사단원의 무기, 비밀지도 - level1 (2) | 2024.09.21 |
안녕하세요. 성장하고 싶은 개발자 orElse입니다. 지켜봐주세요.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!