We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 9019๋ฒˆ: DSLR - ํŒŒ์ด์ฌ

Redddy 2022. 8. 3. 08:27

๐Ÿ”ˆ ๋ฌธ์ œ

๋„ค ๊ฐœ์˜ ๋ช…๋ น์–ด D, S, L, R ์„ ์ด์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ๊ฐ€ ์žˆ๋‹ค. ์ด ๊ณ„์‚ฐ๊ธฐ์—๋Š” ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํ•˜๋‚˜ ์žˆ๋Š”๋ฐ, ์ด ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” 0 ์ด์ƒ 10,000 ๋ฏธ๋งŒ์˜ ์‹ญ์ง„์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ๋ช…๋ น์–ด๋Š” ์ด ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ n์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™˜ํ•œ๋‹ค. n์˜ ๋„ค ์ž๋ฆฟ์ˆ˜๋ฅผ d1, d2, d3, d4๋ผ๊ณ  ํ•˜์ž (์ฆ‰ n = ((d1 × 10 + d2) × 10 + d3) × 10 + d4๋ผ๊ณ  ํ•˜์ž)

  1. D: D ๋Š” n์„ ๋‘ ๋ฐฐ๋กœ ๋ฐ”๊พผ๋‹ค. ๊ฒฐ๊ณผ ๊ฐ’์ด 9999 ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋Š” 10000 ์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ทจํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’(2n mod 10000)์„ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ๋‹ค.
  2. S: S ๋Š” n์—์„œ 1 ์„ ๋บ€ ๊ฒฐ๊ณผ n-1์„ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ๋‹ค. n์ด 0 ์ด๋ผ๋ฉด 9999 ๊ฐ€ ๋Œ€์‹  ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ๋‹ค.
  3. L: L ์€ n์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์™ผํŽธ์œผ๋กœ ํšŒ์ „์‹œ์ผœ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ๋‹ค. ์ด ์—ฐ์‚ฐ์ด ๋๋‚˜๋ฉด ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ ๋„ค ์ž๋ฆฟ์ˆ˜๋Š” ์™ผํŽธ๋ถ€ํ„ฐ d2, d3, d4, d1์ด ๋œ๋‹ค.
  4. R: R ์€ n์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์˜ค๋ฅธํŽธ์œผ๋กœ ํšŒ์ „์‹œ์ผœ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ๋‹ค. ์ด ์—ฐ์‚ฐ์ด ๋๋‚˜๋ฉด ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ ๋„ค ์ž๋ฆฟ์ˆ˜๋Š” ์™ผํŽธ๋ถ€ํ„ฐ d4, d1, d2, d3์ด ๋œ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, L ๊ณผ R ๋ช…๋ น์–ด๋Š” ์‹ญ์ง„ ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ n = 1234 ๋ผ๋ฉด ์—ฌ๊ธฐ์— L ์„ ์ ์šฉํ•˜๋ฉด 2341 ์ด ๋˜๊ณ  R ์„ ์ ์šฉํ•˜๋ฉด 4123 ์ด ๋œ๋‹ค.
์—ฌ๋Ÿฌ๋ถ„์ด ์ž‘์„ฑํ•  ํ”„๋กœ๊ทธ๋žจ์€ ์ฃผ์–ด์ง„ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ •์ˆ˜ A์™€ B(A ≠ B)์— ๋Œ€ํ•˜์—ฌ A๋ฅผ B๋กœ ๋ฐ”๊พธ๋Š” ์ตœ์†Œํ•œ์˜ ๋ช…๋ น์–ด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ A = 1234, B = 3412 ๋ผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ์ ์šฉํ•˜๋ฉด A๋ฅผ B๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
1234 →L 2341 →L 3412
1234 →R 4123 →R 3412
๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ๊ทธ๋žจ์€ ์ด ๊ฒฝ์šฐ์— LL ์ด๋‚˜ RR ์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
n์˜ ์ž๋ฆฟ์ˆ˜๋กœ 0 ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ 1000 ์— L ์„ ์ ์šฉํ•˜๋ฉด 0001 ์ด ๋˜๋ฏ€๋กœ ๊ฒฐ๊ณผ๋Š” 1 ์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ R ์„ ์ ์šฉํ•˜๋ฉด 0100 ์ด ๋˜๋ฏ€๋กœ ๊ฒฐ๊ณผ๋Š” 100 ์ด ๋œ๋‹ค.

 

๐Ÿ“์ž…๋ ฅ

ํ”„๋กœ๊ทธ๋žจ ์ž…๋ ฅ์€ T ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜ T ๋Š” ์ž…๋ ฅ์˜ ์ฒซ ์ค„์— ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ A์™€ B(A ≠ B)๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ A๋Š” ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ดˆ๊ธฐ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๊ณ  B๋Š” ์ตœ์ข… ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. A ์™€ B๋Š” ๋ชจ๋‘ 0 ์ด์ƒ 10,000 ๋ฏธ๋งŒ์ด๋‹ค.

 

๐Ÿ“‘์ถœ๋ ฅ

A์—์„œ B๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ช…๋ น์–ด ๋‚˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด ๋‚˜์—ด์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฉด, ์•„๋ฌด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ’€์ด

ํ•ด๋‹น ๋ฌธ์ œ๋Š” BFS๋ฅผ ํ†ตํ•ด ์ˆ˜์˜ ๋ณ€ํ™”๊ณผ์ •์„ ํƒ์ƒ‰ํ•ด ๋‚˜๊ฐ”๋‹ค.

ํ์— ๋ณ€ํ™”๋œ ์ˆซ์ž ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ ์ˆซ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด๋„ ๊ฐ™์ด ์ €์žฅํ•ด์ฃผ์–ด ๊ฐฑ์‹ ํ•˜์˜€๋‹ค.

D๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹จ์ˆœํžˆ (2*n)%10000 ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋๋‹ค. S๋Š” n์ด 0์ด ์•„๋‹๋•Œ๋Š” n-1 ์„ ํ•ด์ฃผ์—ˆ๊ณ  0์ผ๋•Œ๋Š” n๊ฐ’์— 9999๋ฅผ ๋„ฃ์—ˆ๋‹ค.

L๊ณผ R ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” n์ด 4์ž๋ฆฌ ์ˆซ์ž์ผ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด ์ธ๋ฑ์‹ฑ์„ ํ•ด์ฃผ์–ด ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๊ณ , 4์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ 0์„ ํฌํ•จ์‹œ์ผœ ์ธ๋ฑ์‹ฑ์„ ํ•ด์ฃผ์—ˆ๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

import sys
from collections import deque
input=sys.stdin.readline

# BFS ์ •์˜
def bfs(a,b):
    queue=deque()
    queue.append([a,'']) # ํ˜„์žฌ ์ˆซ์ž์™€ ๋ช…๋ น์–ด
    visited=[False]*10000 # ๋ฐฉ๋ฌธ๋ฐฐ์—ด
    while queue:
        tob,pro=queue.popleft()
        if tob==b: # ํ˜„์žฌ ์ˆซ์ž๊ฐ€ b์™€ ๊ฐ™๋‹ค๋ฉด ๋ช…๋ น์–ด๋ฅผ ๋ฆฌํ„ด
            return pro
        # S ์ˆ˜ํ–‰    
        if tob == 0:
            S=9999
        else:
            S=tob-1
		
        # L๊ณผ R ์ˆ˜ํ–‰
        if len(str(tob)) == 4:
            L = int(str(tob)[1:]+str(tob)[0])
            R = int(str(tob)[-1]+str(tob)[:-1])
        else:
            L = tob*10
            R = int(str(tob)[-1]+str(0)*(4-len(str(tob)))+str(tob)[:-1])

		# ์ด๋™ ๊ฐ€๋Šฅํ•œ ์ˆซ์ž ๋ฐฐ์—ด
        move=[(2*tob)%10000, S, L, R]
        # ๋ช…๋ น์–ด
        way=['D','S','L','R']
        for i in range(4):
            if not visited[move[i]] and move[i] < 10000: # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๊ณ  10000 ์ดํ•˜๋ผ๋ฉด ๋ฐฉ๋ฌธ
                visited[move[i]] = True # ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
                queue.append([move[i], pro+way[i]]) # ํ์— ์ˆซ์ž์™€ ๋ช…๋ น์–ด ์‚ฝ์ž…

        
for _ in range(int(input())):
    a,b=map(int,input().split())
    print(bfs(a,b))

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

์‹œ์ดˆ์™€ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๋ฅผ ๋ฐ˜๋ณตํ•˜์˜€๋˜...ใ…Žใ…Ž

ํ‹€๋ ธ๋˜ ์ด์œ ๋Š” L๊ณผ R์ด 4์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์•„๋‹๋•Œ ์ฒ˜๋ฆฌ๊ณผ์ •์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐฑ์ค€์—๋„ ๊ธ€์„ ๋‚จ๊ฒผ๋‹ค. ํ˜น์‹œ ๋‚˜๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ๋ถ„์ด ์žˆ์„์ˆ˜๋„ ์žˆ์œผ๋‹ˆ

https://www.acmicpc.net/board/view/96558

 

๊ธ€ ์ฝ๊ธฐ - ๊ณ„์† 7%์—์„œ ํ‹€๋ฆฌ์‹œ๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ธ€์„ ์ ์Šต๋‹ˆ๋‹คใ…Ž

๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

www.acmicpc.net

์ฒซ๋ฒˆ์งธ ๋งž์•˜์Šต๋‹ˆ๋‹ค๋Š” ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ dict ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•˜์˜€๊ณ , ๋‘๋ฒˆ์งธ ๋งž์•˜์Šต๋‹ˆ๋‹ค์—์„œ๋Š” ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ list ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•˜์˜€๊ณ  ๋˜ ์ด๋™์ œํ•œ์„ 10000์ด ์•„๋‹Œ 100000๋กœ 0 ํ•˜๋‚˜๋ฅผ ๋” ๋ถ™ํ˜”์–ด์„œ ๊ทธ๋ถ€๋ถ„๋„ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ์—ˆ๋‹ค. 3๋ฒˆ์งธ๋Š” 0ํ•˜๋‚˜ ๋” ๋ถ™ํžŒ๊ฑฐ ์ˆ˜์ •ํ•˜๊ณ  dict ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ DSLR 

 

9019๋ฒˆ: DSLR

๋„ค ๊ฐœ์˜ ๋ช…๋ น์–ด D, S, L, R ์„ ์ด์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ๊ฐ€ ์žˆ๋‹ค. ์ด ๊ณ„์‚ฐ๊ธฐ์—๋Š” ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํ•˜๋‚˜ ์žˆ๋Š”๋ฐ, ์ด ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” 0 ์ด์ƒ 10,000 ๋ฏธ๋งŒ์˜ ์‹ญ์ง„์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ๋ช…๋ น์–ด๋Š” ์ด ๋ ˆ์ง€์Šคํ„ฐ์—

www.acmicpc.net