Algorithm (PS)

[백준] 15787 기차가 어둠을 헤치고 은하수를 Python

minjiwoo 2022. 11. 11. 12:38
728x90

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

 

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

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

www.acmicpc.net

구현문제이다 실버 2.. 

하라는대로 명령처리를 해준다음에 기차를 for문을 통해서 하나씩 string으로 만들고, 이전에 등장했는지 count해준다 

3번명령 4번명령을 처음에는 for문으로 구현하다가 생각해보니까 문자열슬라이싱을 쓰는 것이 파이썬이기도 하고 더 빠를것 같아서 개선했다

놀랍게도 pypy python 모두 통과한다 ㅋㅋ (파이썬은 조금 힘겹게 통과하긴함 ㅎ)

n, m = map(int, input().split())
trains = [[0] * 20 for _ in range(n)] # 0 : 빈자리, 1: 승객 o
patterns = []
answer = 0
for _ in range(m):
    data = list(map(int, input().split()))
    if data[0] == 1:
        i, j = data[1], data[2]
        if trains[i-1][j-1] == 0:
            trains[i-1][j-1] = 1
    elif data[0] == 2:
        i, j = data[1], data[2]
        if trains[i-1][j-1] == 1:
            trains[i-1][j-1] = 0
    elif data[0] == 3:
        i = data[1]-1
        trains[i] = [0] + trains[i][:19]
    elif data[0] == 4: # 4 앞으로 한칸
        i = data[1]-1
        trains[i] = trains[i][1:]+[0]

# 패턴 확인

for i in range(n):
    train = str(trains[i])
    if train not in patterns:
        answer += 1
        patterns.append(train)
    else:
        continue

print(answer)

728x90