728x90
문제
다음은 늑대 나라에서 사용하는 올바른 단어에 대한 설명이다.
- 임의의 양의 정수 n에 대해서, 'w'가 n번 나오고, 그 다음에 'o'가 n번, 그 다음에 'l'이 n번, 그 다음에 'f'가 n번 나온 단어는 올바른 단어이다.
- 올바른 단어 두 개를 이은 단어도 올바른 단어이다.
- 1번과 2번 조건으로 만들 수 있는 단어만 올바른 단어이다.
다음은 올바른 단어의 예시이다.
- 1번 규칙으로 만든 "wolf", "wwoollff", "wwwooolllfff"는 모두 올바른 단어이다.
- 2번 규칙으로 만든 "wolfwwoollff"은 올바른 단어이다.
- 2번 규칙을 두 번 써서 만든 "wolfwwoollffwolf"은 올바른 단어이다.
- "wfol"은 올바른 단어가 아니다. (순서가 올바르지 않음)
- "wwolfolf"는 올바른 단어가 아니다. (문자열의 중간에 다른 문자열을 집어 넣음)
- "wwwoolllfff"는 올바른 단어가 아니다. (o가 2번 들어갔다)
입력
첫째 줄에 단어가 주어진다. 단어는 w, o, l, f로만 이루어져 있으며, 길이는 50을 넘지 않는다.
출력
입력으로 주어진 단어가 올바른 단어인 경우에는 1을, 아니면 0을 출력한다.
접근 방식
간단하게 풀 수 있다
먼저 전체 문자열을 순차적으로 탐색하면서 wolf 블록 단위를 검증한다
이때 한 블록의 w 의 개수를 먼저 구한뒤 이후 o, l, f 각각 w의 개수와 같은지 확인한다
만약 같다면 다음 블록으로 넘어가고 아니라면 바로 0을 출력하고 종료하면 된다!
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
string s; cin >> s;
int i = 0, n = s.length();
while (i < n) {
if (s[i] != 'w') {
cout << 0;
return 0;
}
int cnt = 0;
while (i < n && s[i] == 'w') {
cnt++;
i++;
}
for (char c : {'o', 'l', 'f'}) {
int tmp = 0;
while (i < n && s[i] == c) {
tmp++;
i++;
}
if (tmp != cnt) {
cout << 0;
return 0;
}
}
}
cout << 1;
return 0;
}
728x90
'Algorithm' 카테고리의 다른 글
[BOJ] 회전하는 큐 1021번 C++ (0) | 2025.04.30 |
---|---|
[BOJ] 트럭 13335번 C++ (0) | 2025.04.24 |
[BOJ] 줄서기 17178번 C++ (0) | 2025.04.09 |
[BOJ] 옥상 정원 꾸미기 6198번 C++ (0) | 2025.04.09 |
[BOJ] 포스택 25556번 C++ (0) | 2025.04.08 |