๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 3190_๋ฑ€

๋ฟŒ์•ผ._. 2022. 3. 23. 16:19

Gold V

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/3190)

<๋ฑ€>

๋ฌธ์ œ 

 

 'Dummy'๋ผ๋Š” ๋„์Šค ๊ฒŒ์ž„์ด ์žˆ๋‹ค. ์ด ๊ฒŒ์ž„์—๋Š” ๋ฑ€์ด ๋‚˜์™€์„œ ๊ธฐ์–ด ๋‹ค๋‹ˆ๋Š”๋ฐ, ์‚ฌ๊ณผ๋ฅผ ๋จน์œผ๋ฉด ๋ฑ€ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. ๋ฑ€์ด ์ด๋ฆฌ์ €๋ฆฌ ๊ธฐ์–ด ๋‹ค๋‹ˆ๋‹ค๊ฐ€ ๋ฒฝ ๋˜๋Š” ์ž๊ธฐ ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„์ด ๋๋‚œ๋‹ค.
๊ฒŒ์ž„์€ NxN ์ •์‚ฌ๊ฐ ๋ณด๋“œ ์œ„์—์„œ ์ง„ํ–‰๋˜๊ณ , ๋ช‡๋ช‡ ์นธ์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋ณด๋“œ์˜ ์ƒํ•˜์ขŒ์šฐ ๋์— ๋ฒฝ์ด ์žˆ๋‹ค. ๊ฒŒ์ž„์ด ์‹œ์ž‘ํ•  ๋•Œ ๋ฑ€์€ ๋งจ ์œ„ ๋งจ ์ขŒ์ธก์— ์œ„์น˜ํ•˜๊ณ  ๋ฑ€์˜ ๊ธธ์ด๋Š” 1์ด๋‹ค. ๋ฑ€์€ ์ฒ˜์Œ์— ์˜ค๋ฅธ์ชฝ์„ ํ–ฅํ•œ๋‹ค.
๋ฑ€์€ ๋งค ์ดˆ๋งˆ๋‹ค ์ด๋™์„ ํ•˜๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.

๋จผ์ € ๋ฑ€์€ ๋ชธ๊ธธ์ด๋ฅผ ๋Š˜๋ ค ๋จธ๋ฆฌ๋ฅผ ๋‹ค์Œ์นธ์— ์œ„์น˜์‹œํ‚จ๋‹ค.
๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ ์นธ์— ์žˆ๋˜ ์‚ฌ๊ณผ๊ฐ€ ์—†์–ด์ง€๊ณ  ๊ผฌ๋ฆฌ๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.
๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค„์—ฌ์„œ ๊ผฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ์นธ์„ ๋น„์›Œ์ค€๋‹ค. ์ฆ‰, ๋ชธ๊ธธ์ด๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์‚ฌ๊ณผ์˜ ์œ„์น˜์™€ ๋ฑ€์˜ ์ด๋™๊ฒฝ๋กœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ด ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋ผ.

 

 

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์— ๋ณด๋“œ์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง„๋‹ค. (2 ≤ N ≤ 100) ๋‹ค์Œ ์ค„์— ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 ≤ K ≤ 100)
๋‹ค์Œ K๊ฐœ์˜ ์ค„์—๋Š” ์‚ฌ๊ณผ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ํ–‰, ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ์—ด ์œ„์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์‚ฌ๊ณผ์˜ ์œ„์น˜๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋ฉฐ, ๋งจ ์œ„ ๋งจ ์ขŒ์ธก (1ํ–‰ 1์—ด) ์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค.
๋‹ค์Œ ์ค„์—๋Š” ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ํšŸ์ˆ˜ L ์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ L ≤ 100)
๋‹ค์Œ L๊ฐœ์˜ ์ค„์—๋Š” ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ,  ์ •์ˆ˜ X์™€ ๋ฌธ์ž C๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ. ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ X์ดˆ๊ฐ€ ๋๋‚œ ๋’ค์— ์™ผ์ชฝ(C๊ฐ€ 'L') ๋˜๋Š” ์˜ค๋ฅธ์ชฝ(C๊ฐ€ 'D')๋กœ 90๋„ ๋ฐฉํ–ฅ์„ ํšŒ์ „์‹œํ‚จ๋‹ค๋Š” ๋œป์ด๋‹ค. X๋Š” 10,000 ์ดํ•˜์˜ ์–‘์˜ ์ •์ˆ˜์ด๋ฉฐ, ๋ฐฉํ–ฅ ์ „ํ™˜ ์ •๋ณด๋Š” X๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ 

 

์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

   - my solution

import sys

if __name__=='__main__':
    N=int(input()) # ๋ณด๋“œ ํฌ๊ธฐ
    k=int(input()) # ์‚ฌ๊ณผ ๊ฐœ์ˆ˜

    graph=[[0]*N for i in range(N)]
    for i in range(k): # ์‚ฌ๊ณผ ์œ„์น˜ ํ‘œ์‹œ
        x,y=map(int,sys.stdin.readline().split())
        graph[x-1][y-1]=1

    L=int(input()) # ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ํšŸ์ˆ˜
    info=[] 
    for i in range(L): # ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ์ •๋ณด
        info.append(sys.stdin.readline().split())

    now=[[0,0]] # ๋ฑ€์˜ ์œ„์น˜ ๊ธฐ๋ก
    D='R' # ๋ฐฉํ–ฅ
    snake=[[0]*N for i in range(N)] # ๋ฑ€
    snake[0][0]=1
    time=0 # ์ดˆ
    while True:
        if len(info)!=0: # x ์ดˆ ๋๋‚œ ๋’ค ๋ฐฉํ–ฅ ํšŒ์ „
            if time==int(info[0][0]):
                temp=info.pop(0)
                if temp[1]=='L': # ๋ฐฉํ–ฅ ์ „ํ™˜
                    if D=='R':
                        D='U'
                    elif D=='L':
                        D='D'
                    elif D=='U':
                        D='L'
                    else:
                        D='R'
                else:
                    if D=='R':
                        D='D'
                    elif D=='L':
                        D='U'
                    elif D=='U':
                        D='R'
                    else:
                        D='L'
        time += 1
        if D=='R': # ์˜ค๋ฅธ์ชฝ
            temp=[now[-1][0], now[-1][1]+1]
        elif D=='L': # ์™ผ์ชฝ
            temp=[now[-1][0], now[-1][1]-1]
        elif D=='U': # ์œ„
            temp=[now[-1][0]-1, now[-1][1]]
        else: # ์•„๋ž˜
            temp=[now[-1][0]+1, now[-1][1]]

        if temp[0] >= 0 and temp[0] < N and temp[1] >= 0 and temp[1] < N: # ๋ณด๋“œ ๋ฒ”์œ„ ์•ˆ์ด๋ผ๋ฉด
            if snake[temp[0]][temp[1]] == 1: # ์ž๊ธฐ ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„ ๋
                break
            snake[temp[0]][temp[1]] = 1 # ๋ฑ€ ๋จธ๋ฆฌ๋ฅผ ๋‹ค์Œ ์นธ์— ์œ„์น˜
            now.append(temp) # ๋ฑ€ ์œ„์น˜ ์ถ”๊ฐ€

            if graph[now[-1][0]][now[-1][1]] != 1: # ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด ๋ชธ ๊ธธ์ด๋ฅผ ์ค„์—ฌ์„œ ๊ผฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ์นธ์„ ๋น„์›€
                temp = now.pop(0)
                snake[temp[0]][temp[1]] = 0
            else: # ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด ์‚ฌ๊ณผ๊ฐ€ ์—†์–ด์ง€๊ณ  ๊ผฌ๋ฆฌ๋Š” ์›€์ง์ด์ง€ ์•Š์Œ
                graph[now[-1][0]][now[-1][1]]=0
        else: # ๋ฒฝ์— ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„ ๋
            break

    print(time)

 

  • ๋ณด๋“œ ํฌ๊ธฐ(N), ์‚ฌ๊ณผ ๊ฐœ์ˆ˜(k), ์‚ฌ๊ณผ ์œ„์น˜(graph), ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ํšŸ์ˆ˜(L), ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ์ •๋ณด ์ž…๋ ฅ(info)
  • ๋ฑ€์˜ ์œ„์น˜ ์ขŒํ‘œ ๊ธฐ๋ก(now), ๋ฐฉํ–ฅ (D), ๋ฑ€์˜ ์œ„์น˜ ๊ธฐ๋ก (snake), ์ดˆ (time)
  • ๋ฌดํ•œ ๋ฃจํ”„ 
    : ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ์ •๋ณด์— ์ฃผ์–ด์ง„ ์ดˆ์™€ time์ด ๊ฐ™๋‹ค๋ฉด ๋ฐฉํ–ฅ ์ „ํ™˜ -> ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ, ์œ„์ชฝ, ์•„๋ž˜์ชฝ์ธ ๊ฒฝ์šฐ L, D ์ผ ๋•Œ ๋ฐฉํ–ฅ์ด ๋‹ค ๋‹ค๋ฅด๋ฏ€๋กœ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ฐฉํ–ฅ ํšŒ์ „
    : 1์ดˆ ์ฆ๊ฐ€
    : ๋ฐฉํ–ฅ(D)์— ๋”ฐ๋ผ ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ, ์œ„, ์•„๋ž˜๋กœ ์ด๋™ํ•  ์ขŒํ‘œ ๊ตฌํ•˜๊ธฐ
    : ์ด๋™ํ•  ์ขŒํ‘œ๊ฐ€ ๋ณด๋“œ ๋ฒ”์œ„ ์•ˆ์ด๋ผ๋ฉด
    -> ์ž๊ธฐ ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ๋ฉด(=snake ๋ฆฌ์ŠคํŠธ์—์„œ ์ด๋™ํ•  ์ขŒํ‘œ์˜ ๊ฐ’์ด ์ด๋ฏธ 1์ด๋ผ๋ฉด) ๊ฒŒ์ž„ ๋
    -> ์ž๊ธฐ ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ์ง€ ์•Š์œผ๋ฉด snake ๋ฆฌ์ŠคํŠธ์—์„œ ์ด๋™ํ•  ์ขŒํ‘œ์˜ ๊ฐ’์„ 1๋กœ ์ €์žฅ ๋ฐ ๋ฑ€์˜ ์œ„์น˜ ์ขŒํ‘œ ๊ธฐ๋ก(now)์— ์ถ”๊ฐ€
    -> ์ด๋™ํ•œ ์œ„์น˜์— ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด ๊ผฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ์นธ์„ ๋น„์›Œ์คŒ ( now ๊ฐ’ pop, snake ๊ฐ’ 0์œผ๋กœ ๊ต์ฒด)
    -> ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด ์‚ฌ๊ณผ๊ฐ€ ์—†์–ด์ง€๊ณ  ๊ผฌ๋ฆฌ๋Š” ๊ทธ๋Œ€๋กœ
    : ์ด๋™ํ•  ์ขŒํ‘œ๊ฐ€ ๋ณด๋“œ ๋ฒ”์œ„ ๋ฐ–์ด๋ผ๋ฉด
    -> ๋ฒฝ์— ๋ถ€๋”ชํžˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ฒŒ์ž„ ๋
  • time ์ถœ๋ ฅ

โ“ ์ฒ˜์Œ์— ์™œ ํ‹€๋ ธ๋Š”๊ฐ€?

๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์„ ์ œ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์—์„œ ๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ ์นธ์— ์žˆ๋˜ ์‚ฌ๊ณผ๊ฐ€ ์—†์–ด์ง€๊ณ  ๊ผฌ๋ฆฌ๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค์—์„œ ์‚ฌ๊ณผ๊ฐ€ ์—†์–ด์ง€๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‹€๋ ธ๋˜ ๊ฒƒ์ด๋‹ค. ์‚ฌ๊ณผ๋ฅผ ํ•œ๋ฒˆ ๋จน์—ˆ๋‹ค๋ฉด graph์— ๊ทธ ๊ฐ’์„ 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ์ถ”๊ฐ€ํ–ˆ๋”๋‹ˆ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

โ“ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ์ด์œ ๋Š”?

์ฒ˜์Œ์—๋Š” ๋‹จ์ง€ ๋ฑ€์˜ ๊ผฌ๋ฆฌ์™€ ๋จธ๋ฆฌ ์œ„์น˜๋งŒ ๊ธฐ๋กํ•˜์—ฌ ๋ฑ€์˜ ๋ชธํ†ต์ด ์–ด๋”” ์œ„์น˜ํ•˜๋Š”์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š”๋ฐ ์–ด๋ ค์›Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒ๊ฐํ•œ ๊ฒƒ์ด ๋ฐฉ๋ฌธํ•œ ๊ณณ์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฑ€์˜ ๋ชธํ†ต์„ ๋ฆฌ์ŠคํŠธ์— ํ‘œ์‹œํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋˜ํ•œ ๋ฑ€์˜ ๋ฐฉํ–ฅ์„ ํ‘œ์‹œํ•˜๋Š”๋ฐ ๋งŽ์€ ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒŒ ๋งž๋‚˜ ์‹ถ์—ˆ๋‹ค ใ…Žใ…Ž

 

 


์ƒ๊ฐ๐Ÿค”

 

๋ฌธ์ œ์—์„œ ์ œ์‹œํ•˜๋Š” ์กฐ๊ฑด์€ ๋น ํŠธ๋ฆฌ์ง€ ๋ง ๊ฒƒ ๐Ÿ˜ฅ

 


 

 

 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 2493_ํƒ‘  (0) 2022.03.28
[Baekjoon] 1068_ํŠธ๋ฆฌ  (0) 2022.03.25
[Baekjoon] 7569_ํ† ๋งˆํ†   (0) 2022.03.22
[Baekjoon] 7576_ํ† ๋งˆํ†   (0) 2022.03.21
[Baekjoon] 10026_์ ๋ก์ƒ‰์•ฝ  (0) 2022.03.20