백준 2816 디지털 티비
문제
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
3
MBC
KBS1
KBS2
예제 출력 1
33
예제 입력 2
4
ABC1
ABC02
KBS2
KBS1
예제 출력 2
11144411144
예제 입력 3
4
ABC1
ABC02
KBS2
KBS1
예제 출력 3
33144413
풀이 과정
답이 여러 개가 나올 수 있기 때문에 나는 가장 쉬운 방법으로 풀었다.
채널 이름을 입력받아 리스트로 만든다.
KBS1의 위치와 KBS2의 위치를 파악하고, 리모컨 버튼 누르는 것을 기록할 변수를 둔다.
만약 KBS2가 KBS1보다 뒤에 있으면, 화살표는 맨 처음에 KBS1로 KBS1의 인덱스만큼 간다.
도착했다면, KBS1을 맨 위로 KBS1의 인덱스만큼 올린다.
거기서 다시 화살표를 KBS2로 가게 하고, 다시 맨 위로 올린다.
맨 위에는 KBS1이 있어야 하므로 KBS1의 바로 뒤에 가기 때문에 KBS2의 인덱스에서 1을 뺀 만큼을 움직인다.
KBS1이 KBS2보다 뒤에 있어도 KBS1을 먼저 올린다. 그다음 KBS2를 올린다. KBS1이 올라가면서 KBS2와 위치를 서로 한 번 바꿔 KBS2가 한 칸 밀렸기 때문에 KBS1을 맨 위에 올린 후 화살표가 KBS2의 위치로 갈 때 KBS2의 원래 인덱스에 1을 더한 만큼을 가야 한다.
채널이 올라갈 때 이동하면서 서로 위치가 바뀌므로 인덱스에 주의한다.
코드
N = int(input())
data = [input() for _ in range(N)]
idx1 = data.index('KBS1')
idx2 = data.index('KBS2')
result = ''
if idx1 < idx2:
result += '1' * idx1 + '4' * idx1 + '1' * idx2 + '4' * (idx2 - 1)
else:
result += '1' * idx1 + '4' * idx1 + '1' * (idx2 + 1) + '4' * idx2
print(result)
Author And Source
이 문제에 관하여(백준 2816 디지털 티비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mynote/백준-2816-디지털-티비저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)