차곡차곡

[BOJ/Python] 백준 15787번 - 기차가 어둠을 해치고 은하수를 본문

CS/Algorithm

[BOJ/Python] 백준 15787번 - 기차가 어둠을 해치고 은하수를

sohy 2022. 9. 24. 23:55

백준 #15787 기차가 어둠을 해치고 은하수를

 

15787번: 기차가 어둠을 헤치고 은하수를

입력의 첫째 줄에 기차의 수 N(1 ≤ N ≤ 100000)과 명령의 수 M(1 ≤ M ≤ 100000)가 주어진다. 이후 두 번째 줄부터 M+1번째 줄까지 각 줄에 명령이 주어진다. 

www.acmicpc.net

from collections import deque
import sys
input = sys.stdin.readline

n, m = map(int, input().split())   # n: 기차 수, m: 명령 수
order = list(tuple(map(int, input().split())) for _ in range(m))

train = [deque(0 for _ in range(20)) for _ in range(n)]
for i in range(m):
  if order[i][0] == 1:
    train[order[i][1]-1][order[i][2]-1] = 1
  elif order[i][0] == 2:
    train[order[i][1]-1][order[i][2]-1] = 0
  elif order[i][0] == 3:
    train[order[i][1]-1].rotate(1)
    train[order[i][1]-1][0] = 0
  else:
      train[order[i][1]-1].rotate(-1)
      train[order[i][1]-1][-1] = 0

output_train = []
for i in range(n):
  if train[i] not in output_train:
    output_train.append(train[i])

print(len(output_train))

사람이 없는 곳은 0, 있는 곳은 1로 표현한 기차 리스트 준비

  • 명령 1 : 가리키는 위치의 값 1로 변경
  • 명령 2 : 가리키는 위치의 값 0으로 변경
  • 명령 3 : 뒤쪽 방향으로 한 칸씩 이동 (각 기차 리스트를 데큐로 만들어서 rotate 이용함)
  • 명령 4 : 앞쪽 방향으로 한 칸씩 이동

rotate 말고 간단하게 이동하는 방법

# 뒤로 이동
train[order[i][1]-1].insert(0, 0)
train[order[i][1]-1].pop()

# 앞으로 이동
train[arr[1]-1].pop(0)
train[arr[1]-1].append(0)

Comments