쌓고 쌓다

[프로그래머스] 가장 가까운 같은 글자 C++ 풀이 및 해설 본문

알고리즘/프로그래머스

[프로그래머스] 가장 가까운 같은 글자 C++ 풀이 및 해설

승민아 2023. 10. 6. 16:45

https://school.programmers.co.kr/learn/courses/30/lessons/142086?language=cpp 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 방법

Map을 사용한다.

 

문자열 s를 탐색하며 처음 나온 문자라면

Map에 해당 문자와 인덱스를 저장한다.

그리고 answer에 -1을 넣는다.

 

이미 존재하는 문자라면

현재 인덱스 i에서 해당 문자의 가장 최근의 위치인 m[s[i]]를 빼서 몇번째 앞에 있는지 계산한다. 그 값을 answer에 push

그리고 Map에 저장된 해당 문자의 가장 최근 위치를 갱신해준다.

 

전체 코드

#include <string>
#include <vector>
#include <map>
using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    map<char, int> m;
    for(int i=0; i<s.length(); i++) {
        
        // 첫 글자라면
        if(m.find(s[i])==m.end()) {
            answer.push_back(-1); 
            m.insert({s[i], i});
        } else {
            answer.push_back(i-m[s[i]]); // 현재 문자의 위치 i에서 앞서 나타난 해당 문자의 위치를 빼면 두 문자 사이의 거리
            m[s[i]]=i; // 현재 문자의 위치를 최신화
        }
        
        
    }
    
    return answer;
}
Comments