IT/ps

백준 9019번 dlsr

u149_cinderella 2025. 2. 17. 21:27

bfs로 풀면 될듯하다.

 

근데 쉬프트연산이 좀 번거롭다.

from collections import deque
import sys
t=int(sys.stdin.readline().rstrip())
for _ in range(t):
    a,b=map(int,sys.stdin.readline().rstrip().split())
    q=deque()
    q.append([a,''])
    v=set()
    v.add(a)
    while q:
        cur_num,op=q.popleft()
        if cur_num==b:
            print(op)
            break
        if (cur_num*2)%10000 not in v:
            v.add((cur_num*2)%10000)
            q.append([(cur_num*2)%10000,op+'D'])
        num=cur_num-1
        if num==0:
            num=9999
        if num not in v:
            v.add(num)
            q.append([num,op+'S'])

        l=(cur_num%1000)*10+cur_num//1000
        r=(cur_num%10)*1000+cur_num//10
        
        if l not in v:
            v.add(l)
            q.append([l,op+'L'])
        if r not in v:
            v.add(r)
            q.append([l,op+'R'])

이렇게 작성했다.

복붙하면서 오류가있었다.

from collections import deque
import sys
t=int(sys.stdin.readline().rstrip())
for _ in range(t):
    a,b=map(int,sys.stdin.readline().rstrip().split())
    q=deque()
    q.append([a,''])
    v=set()

    while q:
        cur_num,op=q.popleft()
        if cur_num==b:
            print(op)
            break
        if (cur_num*2)%10000 not in v:
            v.add((cur_num*2)%10000)
            q.append([(cur_num*2)%10000,op+'D'])
        num=cur_num
        if num==0:
            num=9999
        else:
            num-=1
        if num not in v:
            v.add(num)
            q.append([num,op+'S'])

        l=(cur_num%1000)*10+cur_num//1000
        r=(cur_num%10)*1000+cur_num//10
        
        if l not in v:
            v.add(l)
            q.append([l,op+'L'])
        if r not in v:
            v.add(r)
            q.append([r,op+'R'])

pypy로 제출하니 됐다.

이것도 나중에 속도 2배정도 올리는 풀이로 다시 풀어야한다.