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 |