-
프로그래머스 Lv2 [3차]압축Computer Science/프로그래머스 2023. 9. 26. 11:15
https://school.programmers.co.kr/learn/courses/30/lessons/17684
1. 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다. 2. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다. 3. w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다. 4. 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다. 5. 단계 2로 돌아간다.
나는 이 문제를 사전에 A ~ Z까지 미리 등록을 하고, 사전에 등록 된 값이 있다면 w 문자열을 계속 늘리는 방식으로 풀었다.
여기서 w 문자열이란 사전에 존재하는 가장 긴 문자열을 얘기한다. w문자열이 사전에 등록되 있으면 w문자를 제거하고 다음 문자를 w문자열로 바꿔주었다. 그리고 w + 다음문자를 사전에 등록했다. 마지막 문자열은 즉시 출력해주었다.
#include <string> #include <vector> #include <map> #include <iostream> using namespace std; vector<int> solution(string msg) { vector<int> answer; map<string, int> map; int index = 0; for(index = 0; index < 26; ++index) { char key = 'A' + index; string str(1, key); map.insert({str, index + 1}); } string w; for(int i = 0; i < msg.size(); ++i) { if(map.count(w + msg[i]) == 0) { answer.push_back(map[w]); map.insert({w + msg[i], ++index}); w = msg[i]; }else { w += msg[i]; } if(i == msg.size() - 1) { answer.push_back(map[w]); } } return answer; }
다음날 복습하는데,,, string(1, key) 이 부분을 까먹었다. 기억하자!
'Computer Science > 프로그래머스' 카테고리의 다른 글
프로그래머스 [1차]프렌즈4블록 (0) 2023.09.28 프로그래머스 Lv2 [1차]캐시 (0) 2023.09.28 프로그래머스 Lv2 [3차]파일명 정렬 (0) 2023.09.26 프로그래머스 Lv2 [3차]n진수 게임 (0) 2023.09.26 프로그래머스 Lv2 의상 (0) 2023.09.24