[백준 17042] Elder (C#, C++) - soo:bak
작성일 :
문제 링크
설명
지팡이를 소유한 마법사가 듀얼에서 패배하면 승자에게 지팡이가 넘어가는 규칙으로, 최종 소유자와 지팡이를 소유했던 마법사 수를 구하는 문제입니다.
접근법
지팡이의 현재 소유자를 추적하면서 듀얼 결과를 순회합니다. 패배자가 현재 소유자라면 지팡이가 승자에게 넘어갑니다. 이때 새로운 소유자를 집합에 추가해 중복 없이 소유했던 마법사를 기록합니다.
모든 듀얼을 처리한 뒤 최종 소유자와 집합의 크기를 출력합니다.
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
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var cur = Console.ReadLine()![0];
var n = int.Parse(Console.ReadLine()!);
var seen = new HashSet<char> { cur };
for (var i = 0; i < n; i++) {
var parts = Console.ReadLine()!.Split();
var win = parts[0][0];
var lose = parts[1][0];
if (lose == cur) {
cur = win;
seen.Add(cur);
}
}
Console.WriteLine(cur);
Console.WriteLine(seen.Count);
}
}
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
26
27
28
29
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
char cur; cin >> cur;
int n; cin >> n;
bool seen[26] = {};
seen[cur - 'A'] = true;
for (int i = 0; i < n; i++) {
char win, lose; cin >> win >> lose;
if (lose == cur) {
cur = win;
seen[cur - 'A'] = true;
}
}
int cnt = 0;
for (int i = 0; i < 26; i++) {
if (seen[i]) cnt++;
}
cout << cur << "\n" << cnt << "\n";
return 0;
}