[프로그래머스] 가장 가까운 같은 글자 - c++

삼식이·2025년 5월 22일

알고리즘

목록 보기
57/84

가장 가까운 같은 글자

이 문제는 처음에 작은 실수로 인해 실패했었다.

for(int i=0; i<s.size(); i++) {
        if (mp[s[i]] == 0) {
            mp[s[i]] = i;

이런식으로 map에 해당 문자의 value값이 0이라면
해당 문자가 아직 등장하지 않은 것이므로
문자의 value에 현재 인덱스(위치)값을 저장했었다.

하지만 이렇게 설정할 경우 for문에서 i가 0일때
mp[특정 문자] 의 value에 0을 저장하게 되면,
다음에 또 특정 문자가 재등장했을 때 value값이 0이므로 아직 등장하지 않은 것으로 잘못 판단되어 위치가 제대로 지정되지 못한다.

따라서 다음과 같이 i+1 값을 저장해야 조건문이 올바르게 동작한다.

[전체 코드]

#include <string>
#include <vector>
#include <map>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    map<char, int> mp;
    
    for(int i=0; i<s.size(); i++) {
        if (mp[s[i]] == 0) {
            mp[s[i]] = i+1;
            answer.push_back(-1);
        } else {
            answer.push_back(i+1-mp[s[i]]);
            mp[s[i]] = i+1;
        }
    
    }
    return answer;
}

0개의 댓글