[백준 7601] Outfits (C#, C++) - soo:bak
작성일 :
문제 링크
설명
두 사람이 같은 순서로 옷을 가지고 있지만, 번호를 세는 방향이 서로 다릅니다. 또 각자 옷 하나를 버릴 수 있으므로, 매일 고른 옷이 실제로 같은 옷인지 확인해야 하는 문제입니다.
접근법
옷마다 처음 위치를 번호처럼 붙여 두고, 각자의 옷장에 남아 있는 원래 위치를 그대로 저장해 두면 됩니다.
Becs는 왼쪽부터 번호를 세므로 그대로 지우면 되고, Cas는 오른쪽부터 번호를 세므로 왼쪽 기준 위치로 바꿔서 지워야 합니다. 그 다음 하루마다 Becs가 고른 위치의 원래 번호와 Cas가 고른 위치의 원래 번호를 비교하면 됩니다.
Cas의 선택도 오른쪽 기준이므로, 현재 옷장 길이에서 위치를 한 번 바꾼 뒤 비교합니다. 두 번호가 같으면 ALERT, 다르면 OK를 출력하면 됩니다.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using System.Collections.Generic;
class Program {
static void Main() {
int scenario = 1;
while (true) {
string[] first = Console.ReadLine()!.Split();
int n = int.Parse(first[0]);
int d = int.Parse(first[1]);
if (n == 0 && d == 0)
break;
List<int> becs = new List<int>();
List<int> cas = new List<int>();
for (int i = 1; i <= n; i++) {
becs.Add(i);
cas.Add(i);
}
int removeBecs = int.Parse(Console.ReadLine()!);
int removeCas = int.Parse(Console.ReadLine()!);
if (removeBecs > 0)
becs.RemoveAt(removeBecs - 1);
if (removeCas > 0)
cas.RemoveAt(n - removeCas);
Console.WriteLine($"Scenario {scenario}");
for (int day = 1; day <= d; day++) {
string[] choice = Console.ReadLine()!.Split();
int becsChoice = int.Parse(choice[0]);
int casChoice = int.Parse(choice[1]);
int becsOutfit = becs[becsChoice - 1];
int casOutfit = cas[cas.Count - casChoice];
Console.WriteLine($"Day {day} {(becsOutfit == casOutfit ? "ALERT" : "OK")}");
}
scenario++;
}
}
}
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int scenario = 1;
while (true) {
int n, d;
cin >> n >> d;
if (n == 0 && d == 0)
break;
vector<int> becs, cas;
for (int i = 1; i <= n; i++) {
becs.push_back(i);
cas.push_back(i);
}
int removeBecs, removeCas;
cin >> removeBecs >> removeCas;
if (removeBecs > 0)
becs.erase(becs.begin() + (removeBecs - 1));
if (removeCas > 0)
cas.erase(cas.begin() + (n - removeCas));
cout << "Scenario " << scenario << "\n";
for (int day = 1; day <= d; day++) {
int becsChoice, casChoice;
cin >> becsChoice >> casChoice;
int becsOutfit = becs[becsChoice - 1];
int casOutfit = cas[(int)cas.size() - casChoice];
cout << "Day " << day << " "
<< (becsOutfit == casOutfit ? "ALERT" : "OK") << "\n";
}
scenario++;
}
return 0;
}