문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

[www.acmicpc.net/problem/10953][https://www.acmicpc.net/problem/10953] [https://www.acmicpc.net/problem/10953]: https://www.acmicpc.net/problem/10953

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. A와 B는 콤마(,)로 구분되어 있다.

출력

각 테스트 케이스마다 A+B를 출력한다.

Python

파이썬으로 풀면 너무 쉬운 문제다.

cnt = int(input())
for i in range(cnt):
    a, b = input().split(",")
    print(int(a)+int(b))

C

근데 C언어로 풀려니까 파이썬만큼 쉽지는 않았다. 처음에는 strtok을 사용하려고 했다.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int cnt;
    char input[10];
    scanf("%d\n", &cnt);
    for (int i = 0; i < cnt; i++) {
        scanf("%s", input);
        char* a = strtok(input, ",");
        char* b = strtok(NULL, ",");
        printf("%d\n", atoi(a)+atoi(b));
    }
    return 0;
}

근데 굳이 strtok까지 써야하나 싶어서

#include <stdio.h>

int main()
{
    int cnt;
    char* input;
    scanf("%d\n", &cnt);
    for (int i = 0; i < cnt; i++) {
        char a, b, temp;
        scanf("%c", &a);
        scanf("%c", &temp);
        scanf("%c", &b);
        scanf("\n");
        printf("%d\n", (a+b)-('0'*2));
    }
    return 0;
}

위와 같이 character 하나씩 받는 것으로 바꾸었다.

Enhanced

#include <stdio.h>

int main()
{
    int cnt;
    char* input;
    scanf("%d\n", &cnt);
    for (int i = 0; i < cnt; i++) {
        int a, b;
        scanf("%d,%d", &a, &b);
        printf("%d\n", a+b);
    }
    return 0;
}

더 간단하게는 이렇게 고칠 수 있을 것 같다. 중간에 콤마를 넣어서 두 정수를 나누어 입력받을 수 있다는 걸 깨달았다.

코딩테스트에서 C는 거의 안 쓰던데 C++은 제대로 배운적이 없어서 JAVA나 Python으로 얼른 갈아타야겠다.