Problem Solving/BOJ

[백준 / BOJ] C++ 28682 재우야 임관하자

nageune 2023. 8. 17. 04:18
728x90
반응형

28682번: 재우야 임관하자

 

문제

https://www.acmicpc.net/problem/28682

 

28682번: 재우야 임관하자

인터랙티브 문제의 경우 출력을 하고, 언어에 따라 아래와 같은 명령어를 바로 다음에 적어 출력 버퍼를 flush해 줘야 한다. C: fflush(stdout); C++: fflush(stdout); 혹은 std::cout << std::flush; Java: System.out.flus

www.acmicpc.net

 

 

풀이

대회 중 인터랙티브 문제가 첫 문제여서 당황했다. 인생 첫 인터랙티브 문제다.

문제 하단 노트를 참고하면 몬티홀 문제라는 것을 알 수 있고 내가 출력한 과목과 입력받은 과목이 아닌 나머지 과목을 출력하면 된다.

출력 줄바꿈에서 보통 시간을 위해 '\n'을 사용하는데 인터랙티브 문제에선 flush를 위해 줄바꿈과 flush를 함께 수행하는 endl을 사용했다.

 

대회 중에는 처음 만나는 인터랙티브 문제라 경황이 없어 매우매우매우매우매우매우매우매우매우 비효율적으로 짰다..

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  string a[] = {"swimming", "bowling", "soccer"};
  for (int i = 0; i < n; i++) // 그냥 swimming만 n번 출력해도 된다.
    cout << a[i % 3] << ' ';
  cout << endl;
  vector<string> ans;
  for (int i = 0; i < n; i++) {
    string res;
    cin >> res;
    // swimming만 출력했으면 조건을 이렇게 많이 나누지 않았어도 됐다.
    if (res == a[0]) {
      if (i % 3 == 1)
        ans.push_back(a[2]);
      else
        ans.push_back(a[1]);
    } else if (res == a[1]) {
      if (i % 3 == 0)
        ans.push_back(a[2]);
      else
        ans.push_back(a[0]);
    } else {
      if (i % 3 == 0)
        ans.push_back(a[1]);
      else
        ans.push_back(a[0]);
    }
  }
  for (string s : ans)
    cout << s << ' ';
  cout << endl;
  return 0;
}

 

728x90
반응형