하루에 한 문제
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 압축 -Java 본문
https://programmers.co.kr/learn/courses/30/lessons/17684#
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
class Solution {
public int[] solution(String msg) {
char alphabet='A';
List<Integer> result=new ArrayList<>();
HashMap<String, Integer> dic = new HashMap<>();
for( int i=0; i<26; i++) {
dic.put(String.valueOf(alphabet), i+1);
alphabet++;
}
int num=27;
StringBuilder sb= new StringBuilder();
for(int i=0; i<msg.length(); i++) {
sb.append(msg.charAt(i));
if(!dic.containsKey(sb.toString())) { //없다면 ?
dic.put(sb.toString(), num++);//사전에 삽입
result.add(dic.get(sb.toString().substring(0, sb.length()-1)));
sb=new StringBuilder();
i--;
}
}
result.add(dic.get(sb.toString()));
int[] answer = new int[result.size()];
for(int i=0; i<result.size(); i++) {
answer[i]=result.get(i);
}
return answer;
}
}
소요시간 : 26분
처음에 문제를 이해하는데 시간이 좀 걸렸지만
문제만 이해한다면 굉장히 쉬운 문제입니다!
로직을 살펴보면
우선 dic을 유지하기 위해 HashMap을 사용해줍니다.
dic에 A(1) ~ Z(26)까지 삽입을 해줍니다.
그리고 입력으로 들어온 문자를 0번부터 마지막 번호까지 돌아줍니다.
이때, 단어를 StringBuilder로 append 해주면서 dic에 없을 때까지 돌아줍니다.
만약 dic에 단어가 없다면
result에 현재 단어의 인덱스-1까지의 단어의 value를 넣어줍니다.
그리고 현재 단어를 dic에 추가해줍니다.
문제를 잘 이해한다면 쉬운 문제라 딱히 설명할 게 없는 것 같습니다
끝~
'알고리즘 > 프로그래머스 lv2 다시풀기' 카테고리의 다른 글
[프로그래머스-lv2 2019 KAKAO BLIND RECRUITMENT] 후보키 -Java (0) | 2021.03.18 |
---|---|
[프로그래머스-lv2 Summer/Winter Coding(~2018)]영어 끝말잇기 -Java (0) | 2021.03.17 |
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 파일명 정렬 -Java (0) | 2021.03.16 |
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 방금그곡 -Java (0) | 2021.03.16 |
[프로그래머스-lv2 2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 -Java (1) | 2021.03.16 |
Comments