백준 알고리즘 15787번 : 기차가 어둠을 헤치고 은하수를 파이썬 코드 <문제풀이>

2022. 3. 9. 01:27알고리즘 문제풀이

반응형

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

 

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

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

www.acmicpc.net

 

import sys;input=sys.stdin.readline

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

train = list( 0 for _ in range(N) )

for _ in range(M):
    command=list(map(int,input().split()))
    
    if command[0] == 1:
        i=command[1]-1
        x=command[2]-1
        train[i]=train[i] | 1 << x

    elif command[0] == 2:
        i=command[1]-1
        x=command[2]-1
        train[i] = train[i] & ~(1<<x)

    elif command[0] == 3:
        i=command[1]-1
        train[i] = train[i] << 1
        train[i] = train[i] & ~(1 << 20)

    else:
        i=command[1]-1
        train[i] = train[i]>>1

ans=0
for i in range(N):
    flag=True
    for j in range(0,i):
        if train[i]==train[j]:
            flag=False
            break
    if flag:
        ans+=1

print(ans)

비트마스킹을 적용해야 하는 문제입니다.

개념 자체는 어렵지 않은데, 이걸 코드로 구현하려니 헤매게 되는 분류인 것 같습니다.

 

반응형