[문제 위치]
https://www.acmicpc.net/problem/4335
[문제 풀이]
이 문제는 범위 갱신을 통한 시뮬레이션 문제이다.
스탠은 어떤 수를 불러 보고, 상대는 “too high”, “too low”, “right on”으로 대답한다. 스탠이 정직했다면:
- “too high”라고 했을 때 실제 정답은 그 수보다 작아야 하고,
- “too low”라고 했을 때 실제 정답은 그 수보다 커야 한다.
따라서 각 판마다 가능한 정답 범위를 low와 high로 유지한다.
- “too low” → low = max(low, guess+1)
- “too high” → high = min(high, guess-1)
- “right on” → 마지막 수가 [low, high] 범위에 들어가면 정직, 아니면 거짓말.
이때 한 게임이 끝나면 범위를 초기화해야 한다.
#include <bits/stdc++.h>
using namespace std;
#define fastio ios::sync_with_stdio(false); cin.tie(nullptr);
int main() {
fastio;
int guess;
int low = 1, high = 10; // 처음 범위
while (true) {
cin >> guess;
if (guess == 0) break;
string w1, w2;
cin >> w1 >> w2; // "too" or "right", "low/high/on"
if (w2 == "low") {
low = max(low, guess + 1);
} else if (w2 == "high") {
high = min(high, guess - 1);
} else if (w2 == "on") {
if (guess >= low && guess <= high) {
cout << "Stan may be honest\n";
} else {
cout << "Stan is dishonest\n";
}
// 게임 종료 후 범위 초기화
low = 1; high = 10;
}
}
return 0;
}'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글
| [Silver V] 수열과 쿼리-31229 (0) | 2025.09.19 |
|---|---|
| [Silver V] 멘토와 멘티-26265 (0) | 2025.09.19 |
| [Silver I] 가희와 서울 지하철 3호선 - 27884 (1) | 2025.09.14 |
| [Silver V] 김인천씨의 식료품가게 - 12034 (0) | 2025.09.14 |
| [Silver III] 알래스카-4159 (0) | 2025.09.12 |