2026. 2. 3. 16:33ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/5013

접근 방법 - 기초적인 문자열 연산 문제
백준의 5013번 문제는 문자열의 함수를 활용하여 비교적 간단하게 해결할 수 있는 문제이다.
- 입력으로는 전투의 총 횟수와 각 전투에서 용사가 사용한 스킬을 나열한 문자열들이 주어진다.
- C는 얼음 결계, D는 죽음의 손아귀, O는 절멸을 의미한다.
- 얼음 결계 바로 다음 죽음의 손아귀를 사용하지 않은 모든 전투에서는 용사가 이겼다고 가정한다.
해당 문제는, 위와 같은 설명을 기반으로 하여 용사가 이긴 전투의 수를 구하여 이를 정답으로 출력하면 되는 문제이다.
외국어로 작성된 문제 지문에 대한 해석 설명본은 아래 링크에 있으니, 문제 해결할 시 함께 참고하면 좋을 것이다.
https://www.acmicpc.net/board/view/94368
문제 지문의 가정이 중요한데, 얼음 결계 이후에 바로 죽음의 손아귀를 쓴 전투에서는 용사가 전투에서 졌다고 보고 있다.
그리고 그 이외의 전투에서는 용사가 모두 이겼다는 가정이 위 지문에 명시되어 있다.
이때, 얼음 결계 직후 죽음의 손아귀를 사용한 문자는 즉 "CD"라고 볼 수 있는데, 이 단어가 없는 경우의 전투에서는 모두 용사가 이겼다는 점을 알 수 있다.
요약하면 필자는, "CD" 단어를 포함하지 않는 문자열의 개수를 카운팅 하여 이를 정답으로 출력하도록 하였다.
보다 자세한 설명은 아래에 기재해 놓으니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해 보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 전투의 수(n)를 입력받는다.
(이후에 문자열을 입력받기 때문에 현재 입력과의 충돌이 발생하지 않도록, 필자는 이후 cin.ignore() 함수를 활용하여 버퍼를 미리 비워주었다.)
2) 용사가 이긴 전투의 수를 저장할 변수 sum을 0으로 초기화하여 미리 선언해 둔다.
3) n의 크기만큼, 반복문을 수행하여 아래의 연산을 취한다.
- 각 전투에서 용사가 쓴 스킬을 나열한 문자열(st)을 하나씩 입력받는다.
- st에 대하여, find() 함수를 활용해 이 문자열에 "CD" 단어를 포함하고 있는지를 확인하도록 한다.
만약 "CD" 단어를 포함하지 않을 때에는 find() 함수에서 std::string::npos 값을 반환한다. 이 경우에 해당된다면, 이 전투에서는 용사가 이겼다고 볼 수 있기 때문에, sum에 1을 추가하도록 한다.
4) 3)의 연산을 모두 완료하였다면, 최종적으로 저장된 sum의 값을 출력한 뒤, 실행을 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;
//백준 5013번 코드
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
cin.ignore();
int sum = 0;
for (int i = 0; i < n; i++) {
string st;
cin >> st;
if (st.find("CD") == std::string::npos) {
sum++;
}
}
cout << sum << endl;
}
제출 결과

(2025.08.11 백준 5013번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
| [백준 BOJ] 13251번 조약돌 꺼내기 (C++/cpp) (0) | 2026.02.16 |
|---|---|
| [백준 BOJ] 27002번 Max Factor (C++/cpp) (0) | 2026.02.04 |
| [백준 BOJ] 12109번 Hindeks (C++/cpp) (0) | 2026.01.30 |
| [백준 BOJ] 32089번 部員の変遷 (C++/cpp) (0) | 2026.01.27 |
| [백준 BOJ] 6887번 Squares (C++/cpp) (1) | 2026.01.26 |