1. 값을 대입하기 귀찮아서 for문 돌려 입력받았다.
2. 문자열 공백 기준 자르기.
- istringstream
#include <sstream>
std::string input = "asdf sdf aa";
std::istringstream iss(input);
std::string word;
->입력받은 문자열을 스트림처럼 취급하여 공백을 기준으로 단어를 분리할 수 있도록 한다.
while (iss >> word)
->iss 에서 공백을 기준으로 단어를 하나씩 읽어와 word에 저장한다.
#include <sstream>
#include <string>
#include <map>
using namespace std;
string solution(string letter) {
istringstream streamLetter(letter); //문자열 자르기 용
string word;
string morse[] = { ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---",
"-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--",
"-..-","-.--","--.." };
map<string, char> decryption;
map<string, char>::iterator iter;
string answer = "";
char c = 'a';
//map에 페어링
for (int i = 0; i < 26; ++i)
{
decryption.insert({ morse[i], c++ });
}
//자른 문자열인 키에 해당하는 값 찾아 answer에 붙히기.
while (streamLetter >> word)
{
iter = decryption.find(word);
answer.append(1, iter->second);
}
return answer;
}
1번에서 값을 직접 매핑시켜준게 아니라 for문을 사용한거라 미세한 속도 저하가 있을 것 같다.
시간 복잡도 n*m
- gemini 개선
1. auto: 컴파일러가 타입 추론.
iterator에도 사용 가능하다.
for (const auto& code : morse) { // morse 배열의 각 요소에 대해 반복
decryption.insert({code, c++});
}
// map iterator에도 auto 사용 가능
while (streamLetter >> word) {
auto iter = decryption.find(word); // auto를 사용하여 iterator 타입 자동 추론
if (iter != decryption.end()) {
answer += iter->second;
} // ...
}
2. append보다 +=가 일반적이다.
값이 적어서 그런듯.
3. unorderd_map 사용
정렬을 수행하지 않아 상수시간 탐색
4. 정적 초기화
매핑 값은 실행 중 변화하지 않기에 static으로 초기화.
'학습(0) > C++ 문제풀이' 카테고리의 다른 글
입문.프로.배열 회전 시키기, rotate() (0) | 2025.02.21 |
---|---|
프로.입문.2차원 만들기, 2차원 배열 선언 (0) | 2025.02.19 |
프로.입문.구슬을 나누는 경우의 수, 조합 (0) | 2025.02.18 |
프로.입문.진료 순서 (0) | 2025.02.17 |
프로그래머스.입문.외계행성 나이 (0) | 2025.02.17 |