[프로그래머스/C++]Lv.1 - 가장 가까운 같은 글자

YH J·2023년 5월 9일
0

프로그래머스

목록 보기
82/168

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/142086

내 풀이

첫 알파벳은 무조건 -1이므로 -1처리해준다.
그 다음 알파벳부터는 for문을 이중으로 돌려서 해당 알파벳에서 역순으로 서치하면서 같은 문자가 있는지 체크하고 있으면 그 위치를 저장하고 바로 break한다.
없으면 -1이 반환된다.

내 코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    answer.push_back(-1);
    for(int i = 1; i < s.length(); i++)
    {
        int num = -1;
        for(int j = i - 1; j >= 0; j--)
        {
            if(s[i] == s[j])
            {
                num = i - j;
                break;
            }
        }
        answer.push_back(num);
    }
    
    return answer;
}

다른 사람의 풀이

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

using namespace std;

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

다른 사람의 풀이 해석

map을 만들고, find해서 있으면 value값(해당 알파벳을 찾았던 마지막 위치)을 기반으로 index에서 뺴서 위치를 answer에 넣어줌. key를 못찾으면(처음 나온 알파벳이면) -1을 넣어줌.
작업 끝난 뒤 해당 key의 value값을 갱신

profile
게임 개발자 지망생

0개의 댓글