어흥
[Leetcode] String to Integer (atoi) (C++) 본문
728x90
반응형
문제 링크: https://leetcode.com/problems/string-to-integer-atoi/description/?envType=list&envId=rdlarbki
1. 주의할 점
- stoi나 stol을 사용하면 범위를 벗어난 숫자가 있을 수 있으니 사용하지 않는다
- 양수/음수 여부는 따로 저장한다
- leading whitespace 뿐만 아니라 leading zero도 처리한다
2. 구현
- 본문에 적힌 순서대로 구현하면 된다(주석으로 각 요청에 맞는 번호를 적었다)
- 공백이 아닌 문자가 나올때까지 idx++를 진행한다
- 공백 이후의 문자가 부호라면 positive를 통해 저장한다(부호가 없을때를 대비해서 positive의 default는 true로 설정한다)
- 숫자라면 number String에 계속해서 저장한다. 단, leading zero를 의식해서 구현한다
- intMax와 intMin을 통해 number 문자열을 비교하여 각 범위를 벗어난다면 intMax와 intMin으로 재설정되도록 한다
class Solution {
public:
int myAtoi(string s) {
string number ="";
long long answer = 0;
bool positive = true;
int idx = 0, len = s.size();
//1
while(idx<len){
char c = s[idx];
if(c==' ') idx++;
else break;
}
//2
if(idx<len){
if(s[idx]=='-'){
positive = false;
idx++;
}
else if(s[idx]=='+'){
idx++;
}
}
//3
while(idx<len){
char c = s[idx];
if('0'<=c && c<='9') {
idx++;
//4
if(number=="" && c=='0') continue;
number+=c;
}
else break;
}
//5
if(number.size()>0){
string intMax = "2147483647";
string intMin = "2147483648";
if(positive){
if(number.size()>intMax.size() || (number.size()==intMax.size() && number >= intMax)){
answer = INT_MAX;
}
else answer = stol(number);
}
else{
if(number.size()>intMin.size() || (number.size()==intMin.size() && number >= intMin)){
answer = INT_MIN;
}
else answer = stol(number)*-1;
}
}
return answer;
}
};
728x90
반응형
Comments