2026. 1. 8. 15:49ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/31656

접근 방법 - 기초적인 문자열 연산 문제
백준의 31656번 문제는 문자열에 대한 기초적인 연산으로 해결할 수 있는 문제이다.
해당 문제는, 입력으로 주어지는 문자열에 있어 실수로 연속으로 같은 문자를 입력하였을 경우를 교정한 결괏값을 정답으로 출력하면 되는 문제이다.
외국어로 작성된 문제 지문에 대한 해석본은 아래 링크에 있으니, 문제 해결할 시 함께 참고하면 좋을 것이다.
https://www.acmicpc.net/board/view/164016
필자는 문자열을 배열처럼 활용할 수 있는 C++의 특성을 고려하여, 각 위치의 문자가 그 직전 문자와 같은 값을 가지는지를 확인해 가며 문제 해결을 시도해 보았다.
이때, 예제 입력들을 살펴보면 입력으로 주어지는 문자열이 공백을 포함할 수도 있기 때문에, 이 점을 고려하면서 입력을 받아야 해결에 문제가 없을 것이다.
보다 자세한 설명은 아래에 기재해 놓으니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해 보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 문자열(st)을 입력받는다.
이때, 공백을 포함한 입력이 들어올 수도 있기 때문에 필자는 C++ 기준으로 getline()을 통해 입력을 받게끔 하였다.
2) st의 크기만큼, 반복문을 수행하여 아래의 연산을 취한다.
- 첫 번째 문자를 제외하고는, 현재 위치의 문자값과 그 직전 문자값을 비교하도록 한다.
만약 서로 동일한 값을 가진다면, 이는 실수로 중복 입력한 경우에 해당되기 때문에 다음 문자에 대한 연산을 진행하도록 한다.
- 실수로 중복 입력한 경우에 해당되지 않는다면, 해당 문자를 출력한 뒤에 다음 연산을 진행한다.
3) 2)의 연산이 완료되었다면, 정답에 대한 출력은 완료되었다고 볼 수 있기 때문에 실행을 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;
//백준 31656번 코드
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
string st;
getline(cin, st);
for (int i = 0; i < st.size(); i++) {
if (i != 0 && st[i] == st[i - 1]) { continue; }
cout << st[i];
}
cout << endl;
}
제출 결과

(2024.08.08 백준 31656번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
| [백준 BOJ] 1755번 숫자놀이 (C++/cpp) (0) | 2026.01.09 |
|---|---|
| [백준 BOJ] 28635번 Индикатор (C++/cpp) (0) | 2026.01.08 |
| [백준 BOJ] 30664번 Loteria Falha (Python) (0) | 2026.01.08 |
| [백준 BOJ] 2740번 행렬 곱셈 (C++/cpp) (0) | 2026.01.08 |
| [백준 BOJ] 11497번 통나무 건너뛰기 (C++/cpp) (0) | 2026.01.04 |