[백준/C++] 5026 - 박사 과정

orangesnail·2025년 8월 8일

백준

목록 보기
134/169

http://acmicpc.net/problem/5026


구현하기

처음에는 아래와 같은 코드를 짰었다.

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    for (int i = 0; i < n; i++) {
        string q;
        cin >> q;

        if (q == "P=NP") cout << "skipped" << endl;
        else {
            cout << (q[0] - '0') + (q[2] - '0') << endl;
        }
    }

    return 0;
}

그런데 저렇게 아스키코드를 가지고 연산하는 경우 숫자가 두자리 수가 되면 성립하지 않는다...
그래서 아래처럼 stoi를 이용해 안전하게 파싱하는 방법을 이용해 다시 코드를 짜봤다.

문자열.find(찾을문자) 를 통해 해당 문자열에서 찾으려는 문자가 위치하는 인덱스를 반환할 수 있다! 이걸 이용해 먼저 +의 위치를 저장해준다.

stoi(문자) 함수는 문자를 정수로 변환해준다. string to int를 줄여서 stoi이다.

substr(시작위치, 끝낼위치) 는 지정한 범위 내에 위치하는 문자열을 반환한다. 끝낼 위치를 지정하지 않는 경우 끝까지 반환한다. 이걸 이용해 + 전의 숫자, + 이후의 숫자를 반환해 stoi로 정수로 변환해주고 각각 a, b 변수에 저장해준다.

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    cin >> n;

    for (int i = 0; i < n; i++) {
        string q;
        cin >> q;

        if (q == "P=NP") cout << "skipped" << endl;
        else {
            int plusPos = q.find('+');
            int a = stoi(q.substr(0, plusPos));
            int b = stoi(q.substr(plusPos + 1));
            cout << a + b << endl;
        }
    }

    return 0;
}
profile
초보입니다. 피드백 환영합니다 😗

0개의 댓글