Lv 0. 문자열 정렬하기 (1) - 각각의 char가 숫자형태의 캐릭터인지 아닌지 알고싶다면 isdigit() 함수를 사용하자.

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

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(string str) {
    vector<int> answer;
    for(auto c: str){
        if(c-'0'>=0 && c-'0'<=9) answer.emplace_back(c-'0');
    }
    sort(answer.begin(),answer.end());
    return answer;
}

 

위의 풀이가 내가 작성한 풀이이고, 

다른 사람의 풀이를 보면, 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(string my_string)
{
    vector<int> answer;
    for(char c : my_string)
        if(c>=48 && c<58) answer.push_back(c-48);
    sort(answer.begin(), answer.end());
    return answer;
}

이런식으로 딱 '0'부터 '9' 까지의 아스키 코드상에서의 숫자를 이용해서 푸는 방법이 있다. 48~57이라는 수에 대응된다는걸 알면 풀 수있는 방법이었다. 그런데 나는 그걸 몰랐고 몰라도 맨 처음에 제시한 방법처럼 '0' 을 빼줌으로써 센터를 0으로 맞추어서 해결한 형태의 풀이를 작성하였다. 위와 같이 아스키 코드상 0부터 9까지의 char의 값을 알아두면 위와 같이 해결해보고, 만약 기억 안나면 내가 작성한 방법처럼 하면 될것같다. 

 그리고 이 문제를 처음 접했을때, 주어지는 각각의 char 가 숫자인지 아닌지 알려주는 함수가 있었던걸로 기억해서 해당 함수를 사용해서 풀고싶었는데, 정확한 함수명이 생각나지 않아서 가장 처음에 작성한 형태의 코드를 제출했고, 다른 사람의 풀이를 보다보니 해당 함수를 사용한 풀이도 볼 수 있었다. 

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(string my_string) {
    vector<int> answer;
    for(const auto v : my_string){
        if(isdigit(v))
            answer.emplace_back(v-'0');
    }
    sort(answer.begin(),answer.end());
    return answer;
}

위의 풀이를 보면 알 수 있는, <algorithm> 헤더에 있는 isdigit() 이라는 함수이고, 주어지는 char가 숫자라면 true를, 아니면 false를 반환하는 함수이다. 다음에 이런 형태의 코드를 만나면 isdigit() 이라는 함수를 떠올려 보도록 하자. 함수명이 그렇게 어렵지 않다.

to_string() 이라는 함수가 있어서 숫자인지 아닌지 찾아주는 함수도 언더바( _ ) 가 있지 않을가 싶었는데, 이 함수는 그냥 간결하게 

isdigit() 이었다. 

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

Lv 0. 컨트롤 제트  (0) 2023.09.24
Lv 0. 소인수분해  (0) 2023.09.22
Lv 0. 모음 제거  (0) 2023.09.22
Lv 0. 팩토리얼  (0) 2023.09.21
Lv 0. 최댓값 만들기(1)  (0) 2023.09.21
  Comments,     Trackbacks