본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 20361 : 일우는 야바위꾼

반응형

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

 

20361번: 일우는 야바위꾼

첫째 줄에 N (3 ≤ N ≤ 200,000), X (1 ≤ X ≤ N), K (1 ≤ K ≤ 100,000)가 공백으로 구분되어 주어진다. 둘째 줄부터 K개의 줄에는 순서대로 바꾼 두 컵의 위치 Ai, Bi (1 ≤ Ai, Bi ≤ N, Ai ≠ Bi)가 공백

www.acmicpc.net

swap 함수를 사용해보는 간단한 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

컵 개수 n, 공 위치 ballPos, 바꾼 횟수 k, 정답을 출력할 ans, 각 컵의 위치 vector cups를 선언한 후 적절히 입력받습니다.

cups의 원소는 초기에 i번째 index에 i번째 컵이 있다고 생각해 for loop를 수행하면서 해당값을 저장합니다.

📔 풀이과정

1. 이후 k마다 a, b번째 컵을 맞바꾼다는 의미로 입력을 받고 cups의 a, b원소를 바꿔줍니다.

2. 이후 cups의 원소들을 모두 확인하며 ballPos라면 ans에 index를 저장하고 loop를 탈출합니다.

📔 정답출력

ans를 출력해줍니다.


📕 Code

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

int n, ballPos, k, ans;
vector <int> cups;

int main(){
  cin >> n >> ballPos >> k;
  cups.resize(n+1);

  for(int i = 1; i <= n; i++){
    cups[i] = i;
  }

  for(int i = 0, a, b; i < k; i++){
    cin >> a >> b;
    swap(cups[a], cups[b]);
  }
  for(int i = 1; i <= n; i++){
    if(cups[i] == ballPos) {
      ans = i;
      break;
    }
  }

  cout << ans;
}

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.