[백준] Baekjoon Online Judge
문제
소떡소떡은 기다란 꼬치에 소세지와 떡을 끼운 음식이다. 편의상 소떡소떡을 알파벳 s와 t로만 구성된 길이 N의 문자열로 생각하자. 알파벳 s는 소세지를, t는 떡을 의미한다.
위 그림은 길이가 7인 소떡소떡의 예시이다. 유진이는 소떡소떡을 먹기 전에 소떡소떡을 균형 잡힌 소떡소떡으로 만들려고 한다. 꼬치에 꽂힌 소세지와 떡의 개수가 같을 때 이를 균형 잡힌 소떡소떡이라고 한다. 단, 소세지와 떡이 한 개도 꽂혀있지 않다면 균형잡힌 소떡소떡이 아니다. 위 그림은 소세지가 3개, 떡이 4개 꽂혀 있기 때문에 균형 잡힌 소떡소떡이 아니다.
유진이는 소떡소떡의 맨 왼쪽에 있는 소세지나 떡을 떼어낼 수 있다. 오른쪽은 손잡이 부분이기 때문에 오른쪽에서 떼어내는 것은 불가능하다. 위 그림은 소떡소떡의 맨 왼쪽에 있던 소세지를 떼어낸 그림이다.
위 그림은 떡 두 개를 더 떼어낸 그림이다. 소세지가 2개, 떡이 2개 꽂혀 있기 때문에 균형 잡힌 소떡소떡이 되었다.
유진이가 먹으려고 하는 소떡소떡이 주어질 때, 이러한 과정을 통해 만들 수 있는 길이가 최대인 균형 잡힌 소떡소떡은 어떤 모양일까?
입력
첫째 줄에 소떡소떡의 길이 N(2 ≤ N ≤ 100)이 주어진다.
둘째 줄에 소떡소떡을 의미하는 길이 N의 문자열이 주어진다. 이 문자열은 알파벳 s와 t로만 구성되어 있다.
위 과정을 통해 균형 잡힌 소떡소떡으로 만들 수 없는 입력은 주어지지 않는다.
출력
이러한 과정을 통해 만들 수 있는 길이가 최대인 균형 잡힌 소떡소떡의 모양을 출력한다.
풀이
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int N;
string st;
cin >> N >> st;
int s = 0; // 소세지의 수
int t = 0; // 떡의 수
// 소세지와 떡의 수 구하기
for (int i = 0; i < N; i++) {
if (st[i] == 's') s++;
else t++;
}
// 균형 잡힌 소떡소떡 만들기
int idx = 0;
for (int i = 0; i < N; i++) {
if (s == t) {
idx = i;
break;
}
if (st[i] == 's') s--;
else t--;
}
// 출력
for (int i = idx; i < N; i++) cout << st[i];
cout << '\n';
return 0;
}
소세지와 떡의 개수를 구하고, 왼쪽부터 소세지/떡을 하나씩 빼면서 수를 비교한다. 그러다 두 재료의 수가 같아진다면 균형 잡힌 소떡소떡을 구한 것이다.
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 28064번 - 이민희진 (0) | 2025.04.19 |
---|---|
[Baekjoon/C++] 12971번 - 숫자 놀이 (0) | 2025.04.18 |
[Baekjoon/C++] 5988번 - 홀수일까 짝수일까 (0) | 2025.04.17 |
[Baekjoon/C++] 29701번 - 모스 부호 (0) | 2025.04.15 |
[Baekjoon/C++] 3595번 - 맥주 냉장고 (0) | 2025.04.14 |