작성일 :

문제 링크

1547번 - 공

설명

세 개의 컵이 일렬로 놓여 있고, 처음에는 1번 컵 아래에 공이 있습니다.

이후 주어지는 여러 번의 위치 교환 명령을 순서대로 수행하며, 마지막에 공이 들어 있는 컵의 번호를 구하는 문제입니다.


각 명령은 두 컵의 위치를 바꾸는 형식으로 주어집니다.

공은 항상 컵에 들어 있으므로, 컵이 이동할 때 함께 따라갑니다.

최종적으로 공이 들어 있는 컵의 번호를 출력하는 것이 목표입니다.


접근법

  • 3개의 컵이 있다고 가정하고, 이 중 공이 들어있는 컵만 추적하면 됩니다.
  • 세 개의 컵 중 공이 어디에 있는지만 추적하기 위해 bool 배열을 이용해 상태를 기록합니다.
  • 입력으로 주어지는 교환 명령에 따라 두 컵의 위치를 바꾸고, 그에 따라 공의 위치도 함께 갱신해 나갑니다.
  • 모든 교환이 끝난 후, 공이 들어있는 컵의 번호를 출력합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;

class Program {
  static void Main() {
    int m = int.Parse(Console.ReadLine());
    bool[] cup = { true, false, false };

    for (int i = 0; i < m; i++) {
      var tokens = Console.ReadLine().Split();
      int a = int.Parse(tokens[0]) - 1;
      int b = int.Parse(tokens[1]) - 1;

      bool temp = cup[a];
      cup[a] = cup[b];
      cup[b] = temp;
    }

    for (int i = 0; i < 3; i++) {
      if (cup[i]) {
        Console.WriteLine(i + 1);
        break;
      }
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n; cin >> n;
  bool isUnder[3] = {true, false, false};

  while (n--) {
    int a, b; cin >> a >> b;
    swap(isUnder[a - 1], isUnder[b - 1]);
  }

  for (int i = 0; i < 3; i++) {
    if (isUnder[i]) cout << i + 1 << "\n";
  }

  return 0;
}