ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] ๋ฐฑ์ค€ - 1913 ๋‹ฌํŒฝ์ด(๊ธฐ์ดˆ ๋ฐฐ์—ด๋‹ค๋ฃจ๊ธฐ)
    __Python/__Algorithm 2022. 3. 24. 12:42

      ๋ฌธ์ œ

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

     

    ๐Ÿ”น ๋ฌธ์ œ

    ํ™€์ˆ˜์ธ ์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์ง€๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด 1๋ถ€ํ„ฐ N2๊นŒ์ง€์˜ ์ž์—ฐ์ˆ˜๋ฅผ ๋‹ฌํŒฝ์ด ๋ชจ์–‘์œผ๋กœ N×N์˜ ํ‘œ์— ์ฑ„์šธ ์ˆ˜ ์žˆ๋‹ค.

     


    N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋Ÿฌํ•œ ํ‘œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋˜ํ•œ N2 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์ขŒํ‘œ๋„ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด N=5์ธ ๊ฒฝ์šฐ 6์˜ ์ขŒํ‘œ๋Š” (4,3)์ด๋‹ค.

     

    ๐Ÿ”น ์ž…๋ ฅ

    ์ฒซ์งธ ์ค„์— ํ™€์ˆ˜์ธ ์ž์—ฐ์ˆ˜ N(3 ≤ N ≤ 999)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์œ„์น˜๋ฅผ ์ฐพ๊ณ ์ž ํ•˜๋Š” N2 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ฃผ์–ด์ง„๋‹ค.

    ๐Ÿ”น ์ถœ๋ ฅ

    N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ํ‘œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ ์ค„์— N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ํ•œ ์นธ์”ฉ ๋„์–ด์„œ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋ฉฐ, ์ž๋ฆฟ์ˆ˜๋ฅผ ๋งž์ถœ ํ•„์š”๊ฐ€ ์—†๋‹ค. N+1๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ๋ฐ›์€ ์ž์—ฐ์ˆ˜์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜๋ฅผ ํ•œ ์นธ ๋„์–ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.

     

      ํ’€์ด ๋ฐฉ๋ฒ•

     

    ๐Ÿ”น ์ด์ฐจ์› ๋ฐฐ์—ด ๊ตฌํ˜„

    ๐Ÿ”น DFS ์—†์ด ๊ฐ€๋Šฅํ•˜๋‹ค

    ๐Ÿ”น (0,0)์—์„œ ์‹œ์ž‘ํ•ด [ํ•˜ → ์šฐ → ์ƒ → ์ขŒ] ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ๋ฐฐ์—ด์„ ์ฑ„์šด๋‹ค.

    • ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉฐ, ๋ฒฝ์— ๋ถ€๋”ชํžˆ๋ฉด ๋ฐฉํ–ฅ์„ ๋ฐ”๊พผ๋‹ค.
      (๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๊ฑฐ๋‚˜, ์ด๋ฏธ ํ•ด๋‹น ์œ„์น˜์˜ ๊ฐ’์ด ์ฑ„์›Œ์ง„ ๊ฒฝ์šฐ ๋ฒฝ์œผ๋กœ ๊ฐ„์ฃผ.)
    • ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๋ฉด, ๋‹ค์‹œ ์œ„์น˜๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค.
    • ๋ฐฉํ–ฅ ๋ณ€๊ฒฝ ์‹œ, 0 → 1 → 2 → 3 (ํ•˜์šฐ์ƒ์ขŒ) ์ง„ํ–‰ ํ›„ ๋‹ค์‹œ ์•„๋ž˜ ๋ฐฉํ–ฅ(์ธ๋ฑ์Šค 0)์œผ๋กœ ๋Œ์•„๊ฐ€์•ผํ•˜๋ฏ€๋กœ, ๋‚˜๋จธ์ง€๋ฅผ ํ™œ์šฉ
      (0,1,2,3), (4,5,6,7) → %4 → (0,1,2,3)
    • ๋ฌธ์ œ์—์„œ ์ •ํ•œ ๊ฐ’(target)์ด ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ์œ„์น˜ ์ €์žฅ.

     

      ๊ตฌํ˜„ ์ฝ”๋“œ

    import sys
    n = int(sys.stdin.readline())
    target = int(sys.stdin.readline())
    arr = [[0] * n for _ in range(n)]
    
    dx = [1,0,-1,0]
    dy = [0,1,0,-1]
    x,y = 0,0
    cnt = n**2
    d = 0
    x_,y_ = 0,0
    
    while cnt>0:
        arr[x][y] = cnt
        if cnt == target:
            x_,y_ = x+1,y+1
        cnt-=1
        nx = x+dx[d]
        ny = y+dy[d]
        if nx < 0 or nx >= n or ny <0 or ny >= n or arr[nx][ny]!=0:
            d = (d+1)%4
            nx = x+dx[d]
            ny = y+dy[d]
        x,y = nx,ny
    
    for row in arr:
        print(*row)
    print(x_, y_)

     

      ์‹คํ–‰ ๊ฒฐ๊ณผ

     

      ๐Ÿ’ก

    ๐Ÿ”น ์‹œ์ž‘์  ์œ„์น˜(์ดˆ๊ธฐ x,y ์„ ์–ธ)์™€ ์ง„ํ–‰ ๋ฐฉํ–ฅ(dx,dy), ๋ฐฐ์—ด์— ๋„ฃ๋Š” ๊ฐ’(cnt)์„ ๋ณ€ํ˜•ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ชจ์–‘์˜ ๋‹ฌํŒฝ์ด ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

     

     

     

     

     

     

     

    728x90

    ๋Œ“๊ธ€

Designed by Tistory.