만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/programmers&bj

[C++] 백준 10953번: A+B - 6

D36choi 2020. 7. 30. 13:13
728x90

푸는데엔 여러 방법이 있겠지만,

나는 strtok 를 사용한 정직한 방법과

어차피 input 은 X,X 으로 고정적이니까 string 을 사용한 방법 2가지를 해보았다.

 

방법1.

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main()
{
    int T,a,b;
    char input[5];
    cin >> T;
    char * tok;
    for(int i=0; i<T; i++)
    {
        cin >> input;
        tok = strtok(input,",");
        a = atoi(tok);
        tok = strtok(NULL,"");
        b = atoi(tok);
        cout << a+b << "\n";
    }
    return 0;
}

들어온 문자열을 "," 단위로 토큰화 하였다. 두번째 strtok 의 delimeter 는 "," 로 하면 틀린답이 나온다. 그래서 ""로 바꿔주었다. 

cstdlib -> atoi 를 사용하기 위함.

cstring -> strtok 를 사용하기 위함.

 

방법2.

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main()
{
    int T;
    string input;
    cin >> T;
    for(int i=0; i<T; i++)
    {
        cin >> input;
        cout << input[0]-'0'+input[2]-'0' << "\n";
    }
    return 0;
}

string 배열의 각 index는 char 이다. 이를 이용해, 0번과 2번엔 숫자가 들어가니까 그걸 그대로 출력한다.

 

char -> int 화 하기 위해선 char의 값이 '0' ~ '9' 라는 가정하에 '0' 의 아스키코드값을 빼주면 된다.

 

만약 char a = '1'; 일 경우,  a - '0' 은 아스키코드값 49 - 48 이 되어 출력은 정수 1이 되게 된다.