문제
2012년 12월 31일 새벽 4시부터 지상파 아날로그 TV방송이 종료되었다. TV를 자주보는 할머니를 위해서, 상근이네 집도 디지털 수신기를 구입했다.
원래 상근이네 집에는 KBS1과 KBS2만 나왔다. 할머니는 두 방송만 시청한다. 이제 디지털 수신기와 함께 엄청난 양의 채널을 볼 수 있게 되었다. 하지만, 할머니는 오직 KBS1과 KBS2만 보려고 한다. 따라서, 상근이는 채널 리스트를 조절해 KBS1을 첫 번째로, KBS2를 두 번째로 만들려고 한다.
티비를 켜면 디지털 수신기는 시청 가능한 채널 리스트를 보여준다. 모든 채널의 이름은 서로 다르고, 항상 KBS1과 KBS2를 포함하고 있다. 상근이는 이 리모콘을 이용해서 리스트의 순서를 바꾸는 법을 알아냈다. 리스트의 왼편에는 작은 화살표가 있고, 이 화살표는 현재 선택한 채널을 나타낸다. 가장 처음에 화살표는 제일 첫 번째 채널을 가리키고 있다.
다음과 같은 네 가지 버튼을 이용해서 리스트의 순서를 바꿀 수 있다. 각각은 1번부터 4번까지 번호가 적혀져있는 버튼이다.
- 화살표를 한 칸 아래로 내린다. (채널 i에서 i+1로)
- 화살표를 위로 한 칸 올린다. (채널 i에서 i-1로)
- 현재 선택한 채널을 한 칸 아래로 내린다. (채널 i와 i+1의 위치를 바꾼다. 화살표는 i+1을 가리키고 있는다)
- 현재 선택한 채널을 위로 한 칸 올린다. (채널 i와 i-1의 위치를 바꾼다. 화살표는 i-1을 가리키고 있다)
화살표가 채널 리스트의 범위를 넘어간다면, 그 명령은 무시한다.
현재 채널 리스트의 순서가 주어졌을 때, KBS1를 첫 번째로, KBS2를 두 번째로 순서를 바꾸는 방법을 구하는 프로그램을 작성하시오. 방법의 길이는 500보다 작아야 한다. 두 채널을 제외한 나머지 채널의 순서는 상관없다.
입력
첫째 줄에 채널의 수 N이 주어진다. (2 ≤ N ≤ 100)
다음 N개 줄에는 채널의 이름이 한 줄에 하나씩 주어진다. 채널의 이름은 최대 10글자이고, 알파벳 대문자와 숫자로만 이루어져 있다.
이미 KBS1이 첫 번째에, KBS2가 두 번째에 있는 입력은 주어지지 않는다.
출력
상근이가 눌러야 하는 버튼을 순서대로 공백없이 출력한다.
문자열 처리 문제라기 보다는 일반적인 그리디 문제 였다. 앞으로 문제 풀때 철칙을 만들어야 겠다.
1. 그림을 그리든 먼저 구상을 완벽하게 하고 임할 것. 자꾸 문제를 잘못 이해하는 경우 발생
2. 완성 후에는 내가 만든 임의 테스트 케이스로 제대로 출력하는지 확인하고 에러를 잡을 것.
중간 중간 실수가 존재함.
3. 문제가 없을 시 제출.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#include<iostream>
#include<string>
using namespace std;
int ch1 = 0;
int ch2 = 0;
void CH1()
{
int count = 0;
while(ch1 - count >= 1)
{
count++;
cout<<"1";
}
while(ch1 > 0)
{
ch1--;
count--;
cout<<"4";
}
while(ch2 - count >= 1 )
{
count++;
cout<<"1";
}
while(ch2 > 1)
{
ch2--;
count--;
cout<<"4";
}
}
void CH2()
{
int count = 0;
while(ch1 - count >= 1)
{
count++;
cout<<"1";
}
while(ch1 != 0)
{
ch1--;
count--;
cout<<"4";
}
ch2++;
while(ch2 - count >= 1 )
{
count++;
cout<<"1";
}
while(ch2 > 1)
{
ch2--;
count--;
cout<<"4";
}
}
int main(void)
{
int N;
cin >> N;
string str[N];
for(int i = 0; i<N; i++)
{
cin >> str[i];
if(str[i] == "KBS1")
{
ch1 = i;
}
else if(str[i] == "KBS2")
{
ch2 = i;
}
}
if(ch2 >ch1)
{
CH1();
}
else{
CH2();
}
}
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
'Algorithm' 카테고리의 다른 글
백준 7569번 토마토 (0) | 2019.11.11 |
---|---|
백준 1697번 숨바꼭질 (0) | 2019.11.09 |
2112. [모의 SW 역량테스트] 보호 필름 (0) | 2019.11.07 |
2382. [모의 SW 역량테스트] 미생물 격리 (0) | 2019.11.04 |
삼성 모의 테스트 8825. 홀수 중간값 피라미드2 (0) | 2019.11.03 |