문제
https://programmers.co.kr/learn/courses/30/lessons/17684
풀이
구현 문제이다.
아스키 코드를 이용하여 Map에 각 알파벳에 해당하는 색인 번호를 저장해두고 시작한다.
마지막 인덱스 경계값을 신경써서 구현해야 한다.
풀이는 소스코드에 주석을 달아놨다.
소스코드
import java.util.*;
class Solution {
public int[] solution(String msg) {
ArrayList<Integer> list = new ArrayList<Integer>();
// A = 65
// Z = 90
// 색인 번호 ASCII code - 64
// 문자 - 색인번호 저장할 Map 생성
HashMap<String, Integer> map = new HashMap<String, Integer>();
for(int i = 65; i <= 90; i++){
map.put(String.valueOf((char)i), i-64);
}
int dirIdx = 27; // 색인 번호
int i = 0; // 시작 인덱스
int len = msg.length(); // 문자 길이
while(i < len){
if(i == len-1){
// 만약 마지막 인덱스라면, 마지막 문자의 색인번호를 출력
list.add(map.get(String.valueOf(msg.charAt(i))));
break;
}
// 마지막 인덱스가 아니라면,
// 현재 문자
String w = String.valueOf(msg.charAt(i));
i++;
while(true){
// 인덱스가 길이보다 크다면 중지
if(i >= len) break;
// 다음 문자를 가져온다.
String next = String.valueOf(msg.charAt(i));
// 현재 문자 + 다음 문자 가 색인 번호가 있는지?
if(!map.containsKey(w + next)) {
// 없다면 추가한다.
map.put(w + next, dirIdx);
dirIdx++;
break;
}
// 색인 번호가 있다면 현재 문자에 다음 문자를 붙인다.
w += next;
i++; // 색인번호 없는 경우가 나올 때까지 반복
}
list.add(map.get(w));
}
return list.stream().mapToInt(x -> x).toArray();
}
}
'💡Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 호텔 방 배정 (Java) (0) | 2021.11.28 |
---|---|
[프로그래머스] 행렬 테두리 회전하기 (Java) (0) | 2021.11.27 |
[프로그래머스] 쿼드 압축 후 개수 세기 (Java) (0) | 2021.11.23 |
[프로그래머스] 방금그곡 (Java) (0) | 2021.11.23 |
[프로그래머스] 캐시 (Java) (0) | 2021.11.22 |