코테준비/백준

[백준] 16787번: 기차가 어둠을 헤치고 은하수를 - Python

예찬예찬 2025. 6. 2. 12:42
728x90
반응형

링크: https://www.acmicpc.net/problem/15787

 

 

아이디어

  • 단순 구현으로 각 상황 구현
  • 자리 한칸씩 밀기는 슬라이싱으로 자르고 앞이나 뒤에 [0] 더해주면 될듯
  • 마지막 중복된 패턴을 거르는건 set 사용

 

구현

import sys
input = sys.stdin.readline

N, M = map(int, input().split())

train = [[0]*20 for _ in range(N)]


for i in range(M):
    tmp = list(map(int, input().split()))
    if tmp[0] == 1:
          if train[tmp[1]-1][tmp[2]-1] == 0:
               train[tmp[1]-1][tmp[2]-1] = 1
    if tmp[0] == 2:
          if train[tmp[1]-1][tmp[2]-1] == 1:
               train[tmp[1]-1][tmp[2]-1] = 0
    if tmp[0] == 3:
         train[tmp[1]-1] = [0] + train[tmp[1]-1][:-1]
    if tmp[0] == 4:
         train[tmp[1]-1] = train[tmp[1]-1][1:] + [0]

answer = set()
for i in train:
     answer.add(tuple(i))

print(len(answer))

 

 

마무리

구현 자체는 쉬웠지만 set을 사용하는데에 있어 조금 막히는 부분이 있었다.

처음엔 단순히 set(train)을 하려 했지만 리스트는 mutable한 자료형이라 set에 바로 넣을 수 없다는 문제가 발생했다.
이를 해결하기 위해 각 기차의 좌석 상태를 tuple로 변환해서 set에 넣는 방식으로 수정했다.

set의 요소로 사용할 자료형은 반드시 hashable(불변형)이어야 한다는걸 기억하자. 

-> 리스트를 set함수에 사용할 땐 tuple변환 후 사용 까먹지마요

728x90
반응형