코테준비/백준
[백준] 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
반응형