프로그래머스 - level1 문자열을 정수로 바꾸기

pa324·2019년 11월 30일
0

문제

https://programmers.co.kr/learn/courses/30/lessons/12925

풀이

  • 문자열이 숫자로 구성되어 있는데, 해당 문자열을 정수로 반환하는 문제
  • atoi함수 사용하면 쉽게 해결가능, 하지만 연습삼아 문자열->정수 변환함수 직접 구현

문자를 숫자로 바꾸기

  • 아스키코드 48~57은 숫자문자열을 나타냄
  • 아스키코드 48이 숫자 0을 표현한다.
  • (48~57사이 값 중 한개) - 48을 하면 해당 문자열의 숫자가 정수형으로 바뀐다.
    • 50-48 = 2
  • 자릿수를 계산을 위해 문자열이 끝날때 까지 10씩 곱하면 된다.
int atoiSub(char *str){
    int tmp=0;
    while(*str){        
        tmp=tmp*10+(int)(*str-48);      
        str++;
    }   
}

숫자를 문자로 변경

  • 숫자를 10씩 나눠가면서 길이를 구한다.
  • 문자열 가장 끝에 '\0'을 넣어준다.
  • 문자열을 1씩 줄이면서 문자열의 위치에 10으로 나눈 나머지에 48을 더해서 문자열로 변경시킨다.
#include<stdio.h>
#include<string>
using namespace std;

string atoi_string(int num) {
    
    string ss = "";
    int length = 0;
    int temp = num;

    while(temp != 0) {
        temp = temp / 10;
        length++;
    }
    
    ss[length] = '\0';
   
    while(num != 0) {
        length--;
        ss[length] = (char)(num % 10 + 48);
        num = num / 10;
    }
    
    return ss;
    
}

int main() {
    
    int num = 1234;
    string result  = atoi_string(num);
    printf("%s\n",result.c_str());
    return 0;
}

코드

#include <string>
#include <vector>

using namespace std;

int solution(string s) {

    int answer = 0;
    bool flag = false;
    for(int i = 0; i < s.size(); i++) {
       
        if(s[i] == '-') {
            flag = true;
        }
        else if(s[i] == '+') {
            flag = false;
        }
        else {
            int strNum = s[i] - 48;
            answer = answer* 10 + (int)strNum;
        }
    
    }
    
    if(flag) {
        answer = -(answer);
    }
    
    return answer;

}

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    int answer = stoi(s);
    return answer;
}

profile
안녕하세요

0개의 댓글