Problem Solving/BOJ

[백준 / BOJ] C++ 27930 당신은 운명을 믿나요?

nageune 2023. 4. 3. 21:05
728x90
반응형

27930번: 당신은 운명을 믿나요?

 

문제

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

 

27930번: 당신은 운명을 믿나요?

민지는 11번째 글자까지 읽었을 때 각각 1,3,5,7,9번째의 글자를 제거하고 YONSEI를 찾을 수 있다.

www.acmicpc.net

 

 

풀이

주어진 문자열을 차례대로 탐색하며 KOREA와 YONSEI 중 먼저 완성되는 문자를 출력하는 문제다. 따라서 주어진 문자열의 각 문자에 대해 KOREA와 YONSEI에 포함된 문자라면 작업을 수행한다.

 

KOREA와 YONSEI가 몇 번째 글자까지 완성되었는지 나타내는 변수 k와 y에 대해 k 또는 y가 (이번 글자가 들어있어야 할 위치 - 1)인 경우 1 증가시켜 줬다. 예를 들어 K는 KOREA의 1번째에만 쓰이므로 k가 0일 때 1 증가시킨다. E는 KOREA의 4번째와 YONSEI의 5번째에 쓰이므로 k가 3일 때 k를, y가 4일 때 y를 1 증가시켜 준다.

 

위 과정을 반복했을 때 동시에 KOREA와 YONSEI가 완성될 수는 없으므로 조건문을 통해 k==5일 때 KOREA를 출력하고 프로그램을 종료하거나 y==6일 때 YONSEI를 출력하고 프로그램을 종료한다.

 

 

코드

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

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  string s;
  cin >> s;
  int k = 0, y = 0;
  for (char c : s) {
    if (c == 'K' && k == 0)
      k++;
    if (c == 'O') {
      if (k == 1)
        k++;
      if (y == 1)
        y++;
    }
    if (c == 'R' && k == 2)
      k++;
    if (c == 'E') {
      if (k == 3)
        k++;
      if (y == 4)
        y++;
    }
    if (c == 'A' && k == 4)
      k++;
    if (c == 'Y' && y == 0)
      y++;
    if (c == 'N' && y == 2)
      y++;
    if (c == 'S' && y == 3)
      y++;
    if (c == 'I' && y == 5)
      y++;
    if (k == 5) {
      cout << "KOREA";
      return 0;
    } else if (y == 6) {
      cout << "YONSEI";
      return 0;
    }
  }
  return 0;
}

 

728x90
반응형