alpyrithm_알파이리즘
[알고리즘][Python] 백준(BOJ) 2816 디지털 티비_파이썬 본문
2816 디지털 티비 https://www.acmicpc.net/problem/2816
문제 풀기 전 공부할 것 : 문자열 처리, 그리디 알고리즘
문제 힌트 : 예제 입력 1을 넣었을 때 예제 출력 1로 반드시 출력되지 않아도 괜찮다. 본인의 규칙대로 KBS1과 KBS2를 첫 번째 두 번째 있도록 만들면 된다.
풀이 1
<내용>
- KBS1를 첫 번째로, KBS2를 두 번째로 순서를 바꾸는 방법을 구하는 것으로 1, 2, 3, 4번을 모두 사용할 필요가 없다.
- 1, 4번 버튼을 이용해서 해결할 계획이다.
- 1번을 이용해서 KBS1, KBS2가 있는 곳으로 화살표를 보낸다.
- 4번을 이용해서 KBS1과 KBS2를 위의 채널과 바꾸면서 첫 번째, 두 번째로 향하도록 한 칸씩 올린다.
- KBS1, KBS2를 순차적으로 진행한다.
- 단, KBS1이 KBS2보다 아래에 있을 때 KBS1을 올리면서 KBS2를 내리므로 KBS2의 위치가 한 칸 더 내려감을 주의한다.
<코드>
n = int(input())
channel = []
for i in range(n):
name = input()
if name == 'KBS1':
idx1 = i
elif name == 'KBS2':
idx2 = i
channel.append(name)
res = ''
res += '1' * idx1 # KBS1이 있는 곳으로 1번을 이용해서 화살표를 내린다.
res += '4' * idx1 # KBS1을 4번을 이용해서 첫 번째로 보낸다.(화살표는 첫 번째(index=0)을 가리킨다.)
if idx1 > idx2: # KBS1이 KBS2보다 아래에 있으면 KBS1을 첫 번째로 보내는 과정을 통해 KBS2의 위치가 하나 낮아졌다.(index는 1 증가)
idx2 += 1
res += '1' * idx2 # KBS2가 있는 곳으로 1번을 이용해서 화살표를 내린다.
res += '4' * (idx2-1) # KBS2를 4번을 이용해서 두 번째로 보낸다.(첫 번째가 아닌 두 번째로 이동하면 되므로 idx2-1만큼 실행)
print(res)
+) 코드를 간결하게 만들기
풀이 2
<내용>
- 위의 코드에서 channel list를 for문으로 입력받고 index를 list.index()를 이용해 찾았다.
- KBS1의 위치가 KBS2의 위치보다 아래에 있을 경우 idx2를 1 증가시킨다.
- 그리고 위의 논리와 같이 1, 4를 적절하게 반복하도록 한다.
<코드>
n = int(input())
channel = [input() for _ in range(n)]
idx1, idx2 = channel.index('KBS1'), channel.index('KBS2')
if idx1 > idx2:
idx2 += 1
print('1'*idx1 + '4'*idx1 + '1'*idx2 + '4'*(idx2-1))
728x90
반응형
'Algorithm > 백준 알고리즘_Python' 카테고리의 다른 글
[알고리즘][Python] 백준(BOJ) 1946 신입 사원_파이썬 (0) | 2020.08.13 |
---|---|
[알고리즘][Python] 백준(BOJ) 8979 올림픽_파이썬 (0) | 2020.08.07 |
[알고리즘][Python] 백준(BOJ) 2621 카드게임_파이썬 (0) | 2020.08.04 |
[알고리즘][Python] 백준(BOJ) 1652 누울 자리를 찾아라_파이썬 (0) | 2020.08.02 |
[알고리즘][Python] 백준(BOJ) 1004 어린 왕자_파이썬 (0) | 2020.07.29 |
Comments