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
반응형
'코테준비 > 백준' 카테고리의 다른 글
[백준] 2877번: 4와 7 - Python (0) | 2025.06.03 |
---|---|
[백준] 12953번: 오리 - Python (0) | 2025.06.02 |
[백준] 16173번: 점프왕 쩰리 (Small) - Python (0) | 2025.06.02 |
[백준] 1759번: 암호 만들기 - Python (0) | 2025.05.20 |