



-Code
import java.util.*;
class Solution {
public int[] solution(String msg) {
// 기본 사전 생성
Map<String, Integer> dict = new HashMap<>();
for (int i = 1; i < 27; i++) {
char now = (char) ('A' + i - 1);
dict.put(String.valueOf(now), i);
}
// 압축 시작
List<Integer> answer = new ArrayList<>();
int idx = 0;
while(idx < msg.length()) {
String now = "";
// 사전에 있는 가장 긴 단어 찾기
while (idx < msg.length() && dict.containsKey(now + msg.charAt(idx))) {
now += msg.charAt(idx);
// 필요한 만큼 인덱스 전진
idx++;
}
// 색인 번호 저장
answer.add(dict.get(now));
// 현재 위치가 길이보다 작으면 새로운 단어 추가
if (msg.length() > idx) {
int val = dict.size() + 1;
dict.put(now + msg.charAt(idx), val);
}
}
// 리스트를 배열로 변환해 반환
return answer.stream()
.mapToInt(Integer::intValue).toArray();
}
}
푸는데 아래와 같이 2개의 실수가 있었습니다.
1. 예시 설명을 잘못 이해해서 1 단어씩 이동하면서 계속 검사하는 줄 알아서 이상한 입출력이 나오게 되었습니다.
2. 문자열을 붙이며 검사해야 해서 StringBuilder를 사용해 해결하려 했으나 코드가 지저분해져 꼬이게 되었습니다.
그래서 첫번째 문제는 문제 이해를 어딜 잘못했는지 좀 찾아보니 index를 검사한 길이만큼 이동시키면 되는 문제여서 for문으로 하나씩 이동했던 것을 while문으로 길이 안에 있어야 적용하도록 바꾸었고 StringBuilder는 제거하고 그냥 String을 사용해 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 2493번 탑 (0) | 2026.03.31 |
|---|---|
| [백준/Java] 16501번 만족도 점수 (0) | 2026.03.31 |
| [프로그래머스/Java] 뒤에 있는 큰 수 찾기 (0) | 2026.03.30 |
| [백준/Java] 31519번 A Cappella Recording (0) | 2026.03.30 |
| [프로그래머스/Java] 땅따먹기 (0) | 2026.03.29 |