문제를 다 푸는데 대략 1시간이 걸렸다
문제를 이해 못하겠어서 이해하는데 15분
문제 전체 알고리즘 짜는데 5분 ?
이해하자마자 해시맵을 써야하겠다고 느꼈다
대략적인 코드를 짜는 데에 20분
마지막으로 간단한 예외처리 하나 못해서 20분
도합 1시간.
전체적인 알고리즘은 대략 이렇다
하지만 한 가지 예외는 단어의 길이를 계속해서 1씩 늘리는데 이 늘린 단어가 msg의 length() 보다 크면 안된다. 그 경우에는 예외처리 해주어야 한다. 2번째 while 안의 if문이 그것이다. 이 예외처리도 해주어야 한다고 전체적인 로직을 짤 때부터 알았지만, 어느 위치에서 이를 해결해주어야하는지때문에 너무 해맨 것 같다.
import java.util.*;
class Solution {
public ArrayList<Integer> solution(String msg) {
HashMap<String,Integer>map=new HashMap<>();
char ch='A';
for(int i=1;i<=26;i++){ //A부터 Z까지 해시맵에 넣어준다
String n=Character.toString(ch);
map.put(n,i);
ch++;
}
int start=0; //substring할 인덱스
int last=0;
int num=27; //27번째 알파벳부터 추가로 해시맵에 넣어줄 것이다
ArrayList<Integer>list=new ArrayList<>();
String lastTrueWord=""; //마지막으로 true 였던 단어
while(last<=msg.length()){
last=start+1;
String word=msg.substring(start,last);
while(map.containsKey(word)==true){
lastTrueWord=word;
last++;
if(last>msg.length()) {
break;
}
word=msg.substring(start,last);
}
list.add(map.get(lastTrueWord));
map.put(word,num);
num++;
start=last-1;
}
return list;
}
}
https://solved.ac/profile/anwlro0212
하루에 백준 1문제 이상 무조건 푸는 것을 목표로 하고있고
곧 있을 소프트웨어 마에스트로 2차 코딩테스트에도 합격할 수 있었으면 한다.