[프로그래머스/C++]Lv.0 - 한 번만 등장한 문자

YH J·2023년 4월 21일
0

프로그래머스

목록 보기
69/168

문제 링크

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

시도한 방법

map이라는 컨테이너를 이론만 알고 직접 써보지 않아서 생각도 안하고 있었다.
지금 정리를 다시 해보면서 map 없이 구현해보았다.
a ~ z 까지 모두 for문을 돌리면서 find해서 찾을 경우 (처음 find는 무조건 해당 문자들의 맨 앞에것. ) find한 위치 +1에서 다시 탐색해서 하나라도 더 있을 경우 문자열에서 해당 문자를 모두 지운다.
모두 제거 한 뒤 남은 문자 ( 한 번만 나온 문자 ) 들을 sort해준다.

내 코드

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

string solution(string s) {
    string answer = "";
    
    for(int i = 'a'; i <= 'z'; i++)
    {
        if(s.find((char)i) != string::npos)
        {
            if(s.find((char)i, s.find((char)i) + 1) != string::npos)
                s.erase(remove(s.begin(),s.end(),(char)i), s.end());
        }
    }
    sort(s.begin(),s.end());
    answer = s;
    return answer;
}

다른 사람의 풀이

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

string solution(string s) {
    string answer = "";

    map<char,int> m;
    for(const auto v : s)
    {
        m[v]++;
    }

    for(const auto& v : m)
    {
        if(v.second == 1)
        {
            answer.push_back(v.first);
        }
    }
    return answer;
}

다른 사람의 풀이 해석

map을 사용하여 중복이 나올경우 value를 ++해준 뒤 value값이 1인 경우만 answer에 넣어준다. map은 자동으로 정렬해주므로 sort과정은 필요 없다.

profile
게임 개발자 지망생

0개의 댓글