Lv 0. 중복된 문자 제거

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

 

#include <string>
#include <vector>

using namespace std;

int a[200];

string solution(string str) {
    string answer = "";
    for(auto c: str){
        if(a[int(c)]==1) continue;
        answer+=c;
        a[int(c)]=1;
    }
    return answer;
}

위는 내가 작성한 풀이이고, 다른 사람의 풀이를 보니까, unordered_set 을 이용한 짧은 풀이가 있기에 첨부해본다. 

 

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

string solution(string my_string) {
    string answer = "";
    unordered_set<char> us;
    for(const auto v : my_string)
    {
        if(!us.count(v))
        {
            answer.push_back(v);
            us.insert(v);
        }
    }
    return answer;
}

unordered_set 과 unordered_set 내부함수 count()를 알면 사용할 수 있는 풀이이다. 

 

이 코드는 문자열에서 중복된 문자를 제거하는 함수를 구현한 예제입니다. 아래는 코드의 동작과 주요 구성 요소에 
대한 설명입니다:

1. `string solution(string my_string)`: 이 함수는 문자열 `my_string`을 받아서 중복된 문자를 
제거한 결과 문자열을 반환합니다.

2. `unordered_set<char> us;`: `unordered_set` 컨테이너인 `us`를 사용하여 중복된 문자를 추적합니다.
`unordered_set`은 중복을 허용하지 않는 컨테이너로, 새로운 문자를 발견할 때마다 이 컨테이너에 문자를 추가합니다.

3. `for(const auto v : my_string)`: 입력 문자열 `my_string`을 반복하면서 각 문자를 검사합니다.

4. `if(!us.count(v))`: 현재 문자 `v`가 `us` 셋에 없는 경우 (즉, 중복되지 않은 경우) 아래의 두 가지 
작업을 수행합니다.
   
   - `answer.push_back(v)`: 중복되지 않은 문자를 결과 문자열 `answer`에 추가합니다.
   - `us.insert(v)`: 중복 문자를 `us` 셋에 추가하여 중복을 추적합니다.

5. 반복이 끝나면 중복을 제거한 문자열이 `answer`에 저장되어 반환됩니다.

예를 들어, 입력 문자열 `"programming"`이 주어진 경우, 중복 문자를 제거한 결과는 `"progamin"`이 됩니다. 
이 코드는 중복 문자를 효율적으로 제거하고 결과 문자열을 생성하기 위해 해시 셋을 사용하여 중복 문자를 검출합니다.

 

  Comments,     Trackbacks