programmers.co.kr/learn/courses/30/lessons/12925
1. 서론
간단한 level 1문제. 그러나 여러 함수들을 잘 사용할 줄 알아야 슬기롭게 풀 수 있다.
2. 문제 풀이
문자열 s가 있다. 문자열 s를 숫자로 변환한 값을 return 하는 게 문제이다. 앞에는 +,- 부호가 붙는다. (+ 부호는 붙을 수도 안 붙을 수도 있는 것 같다) 음수이건 양수이건 양수로 표현하는 게 키포인트이다.
나는 처음에는 그냥 stoi함수를 이용해서 풀었다. stoi함수는 string to int로 말 그대로 문자열을 숫자로 변환하는 함수이다.
이걸 사용하면 단 한 줄로 문제를 끝낼 수 있다. 하지만 stoi 함수를 코테볼 때 못쓰게 하는 곳도 있기 때문에 stoi가 없는 버전도 만들었다.
그런데 stoi 함수를 그냥 구현해서는 이 문제를 풀 수 없다. 단순히 string to int가 아니라 +, - 부호가 붙기 때문에 그것에 대한 처리가 필요하기 때문이다.
처음에는 단순하게 +일때는 안 붙는 줄 알고 - 일 때만 처리를 해줬다. 실행 결과는 다 맞았으나 채점하려고 내보니까 틀린 테케들이 나와서 60점을 맞았다. 그래서 질문하기에 가보니 +가 있을 때도 있고 없을 때도 있다는 말을 듣고 +, - 부호 처리를 위해 isdigit 함수를 썼다.
isdigit 함수는 숫자인지 아닌지를 판단해주는 함수이다.
3. 코드 설명
1) stoi를 쓴 경우
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
return stoi(s);
}
2) stoi 구현
#include <string>
#include <vector>
#include <cctype>
using namespace std;
int calc(string s)
{
int i, sum = 0, mul = 1;
for (i = s.size() - 1; i >= 0; i--)
{
if (!isdigit(s[i])) break;
sum += (s[i] - '0') * mul;
mul *= 10;
}
if (s[0] == '-')
sum *= -1;
return sum;
}
int solution(string s) {
return calc(s);
}
isdigit으로 +, - 부호가 있는지 없는지 판단하고 부호가 나오면 바로 중지!
부호는 어차피 맨 앞에만 있기 때문에 for문을 빠져나와도 문제가 없다.
그리고 부호가 껴서 문자열 처리되면 답이 달라지기 때문에 꼭 막아줘야 한다.
후에 - 있으면 음수로 바꿔주기.
'Algorithm' 카테고리의 다른 글
[C++] 프로그래머스 내적 (0) | 2020.12.04 |
---|---|
[C++] 프로그래머스 시저 암호 (0) | 2020.12.04 |
[C++] 프로그래머스 수박수박수박수박수박수? (0) | 2020.12.03 |
[C++] 프로그래머스 소수 찾기 (with 에라토스테네스의 체) (0) | 2020.11.18 |
[C++] 프로그래머스 서울에서 김서방 찾기 (0) | 2020.11.16 |