๋ฌธ์ œ

๋‹ค์ด์•„๋ชฌ๋“œ ๊ด‘์‚ฐ์€ 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ Rํ–‰* C์—ด ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์ด๋‹ค.

๋‹ค์ด์•„๋ชฌ๋“œ๋Š” 1๋กœ ์ด๋ฃจ์–ด์ง„ ์ •์‚ฌ๊ฐํ˜•์˜ ๊ฒฝ๊ณ„์„ ์„ 45๋„ ํšŒ์ „์‹œํ‚จ ๋ชจ์–‘์ด๋‹ค. ํฌ๊ธฐ๊ฐ€ 1, 2, 3์ธ ๋‹ค์ด์•„๋ชฌ๋“œ ๋ชจ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ๊ฒผ๋‹ค.

๋‹ค์ด์•„๋ชฌ๋“œ ๊ด‘์‚ฐ์—์„œ ๊ฐ€์žฅ ํฐ ๋‹ค์ด์•„๋ชฌ๋“œ์˜ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

size 1:    size 2:    size 3:
                         1
              1         1 1
   1         1 1       1   1
              1         1 1
                         1

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— R๊ณผ C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. R๊ณผ C๋Š” 750๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ R๊ฐœ์˜ ์ค„์—๋Š” ๋‹ค์ด์•„๋ชฌ๋“œ ๊ด‘์‚ฐ์˜ ๋ชจ์–‘์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋‹ค์ด์•„๋ชฌ๋“œ ๊ด‘์‚ฐ์—์„œ ๊ฐ€์žฅ ํฐ ๋‹ค์ด์•„๋ชฌ๋“œ์˜ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋‹ค์ด์•„๋ชฌ๋“œ๊ฐ€ ์—†์„ ๋•Œ๋Š” 0์„ ์ถœ๋ ฅํ•œ๋‹ค.


7ํŠธ๋˜ ์ข‹์€ ์ƒ๊ฐ์ด ๋‚ฌ์–ด์š”. ๊ทธ๋งŒ ๋‚ฌ์œผ๋ฉด.

6ํŠธ ๋Œ€๊ฐ์„  ์ˆœํšŒ

์ˆœํšŒ๋ฅผ ๊ฐ€๋กœ๋กœ ํ•˜๋‹ˆ๊นŒ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ณ  dp๋‚˜ ๋ฉ”๋ชจ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ธฐ๋กํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ๊นŒ์ง€ โ†—๏ธ๋ฐฉํ–ฅ ์ •๋ณด๋ฅผ ์–ป์œผ๋ ค๋ฉด ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ๋๊นŒ์ง€ 1์„ ์„ผ ํ›„ ์›์œ„์น˜ ๋Œ์•„์™€ ๊ฐœ์ˆ˜๋ฅผ ๊ธฐ๋กํ–ˆ๋Š”๋ฐ 1์„ ์„ธ๊ธฐ ์œ„ํ•ด ํƒ์ƒ‰ํ•œ ์ž๋ฆฌ์— ์•„๋ฌด ์ •๋ณด๊ฐ€ ๋‚จ์ง€ ์•Š๋Š”๋‹ค. ์ด์ „ ํƒ์ƒ‰ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ฝ”๋“œ๋ฅผ ์งฐ์ง€๋งŒ ๋น„ํšจ์œจ์ ์ด๋‹ค. ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์ ์  ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค.

1ํŠธ~5ํŠธ ๊นŒ์ง€์˜ ์ฝ”๋“œ์™€ ๊ทธ๋ฆผ์„ ์‚ดํŽด๋ณด๋‹ค๊ฐ€ ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด๊ฐ€ ๋– ์˜ฌ๋ž๋‹ค!

๋ฐ”๋กœ ๋Œ€๊ฐ์„  ์ •๋ณด๊ฐ€ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ ๋Œ€๊ฐ์„ ์œผ๋กœ 2d array๋ฅผ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋Œ€๊ฐ์„ ์œผ๋กœ ๊ฐ€๋ฉด ๋งˆ์ฃผ ๋ณด๋Š” ๋‘ ๋ฐฉํ–ฅ์„ ํ•œ ๋ฒˆ์— ์ธก์ •ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

Untitled

๊ฒŒ๋‹ค๊ฐ€ ๋Œ€๊ฐ์„  ์ˆœํšŒ๋ฅผ ํ•˜๋ฉด์„œ ์…€ ๋•Œ ์ •๋ณด ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์„ธ์–ด ๋ฒ„๋ฆฌ๋ฉด ์ตœ์ข… ๋ช‡ ๊ฐœ ์—ฐ์†์œผ๋กœ ๋‚˜์˜ฌ์ง€ ๊ณ ๋ฏผํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— 1,2,3,4 ์ˆœ์ฐจ ๊ธฐ๋กํ•ด ๋ฒ„๋ฆฌ๋ฉด ๋œ๋‹ค. ์ด ์ •๋ณด๋ฅผ ์—ญ๋ฐฉํ–ฅ์—์„œ ์ด์šฉํ•˜๋ฉด ํ•ด๋‹น ๋ฐฉํ–ฅ์˜ ์•ž์— 1์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋ฏธ๋ž˜ ์ •๋ณด๊ฐ€ ๋œ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท 2024-01-13 113159.png

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ•˜๋ฉด 4๋ฐฉํ–ฅ ํƒ์ƒ‰์„ 2๋ฐฉํ–ฅ์œผ๋กœ ์ค„์ผ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์—ฐ์† ๊ธฐ๋ก์ด ๋๋‚˜๋ฉด ์—ฐ์† ๊ธฐ๋ก ํšŸ์ˆ˜๋งŒํผ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋ฉด์„œ ๊ฐœ์ˆ˜๋ฅผ ๊ธฐ๋กํ•ด์ฃผ๋ฉด ๋˜ ๊ฒ€์ƒ‰ ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค!

1. ๋Œ€๊ฐ์„ ์œผ๋กœ ์ˆœํšŒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์ž.

def sw_topdn(arr):
    h, w = len(arr), len(arr[0])
    for sumid in range(h + w - 1):
        for y in range(h):
            x = sumid - y
            if 0 <= x < w:
                print(arr[y][x],end=' ')        
        print()

def ne_topdn(arr):
    h, w = len(arr), len(arr[0])
    for sumid in range(h + w - 1):
        for y in range(h - 1, -1, -1):
            x = w - 1 - (sumid - y)
            if 0 <= x < w:
                print(arr[y][x],end=' ')
        print()

matrix = [[f"{x}{y}" for x in range(5)] 
          for y in range(7)]

print(*matrix,sep="\\n")

print("# ๋‚จ์„œ์ชฝ์œผ๋กœ ํƒ‘๋‹ค์šด ์ˆœํšŒ")
sw_topdn(matrix)
print()
print("# ๋ถ๋™์ชฝ์œผ๋กœ ํƒ‘๋‹ค์šด ์ˆœํšŒ")
ne_topdn(matrix)
['00','10','20','30','40']
['01','11','21','31','41']
['02','12','22','32','42']
['03','13','23','33','43']
['04','14','24','34','44']
['05','15','25','35','45']
['06','16','26','36','46']
# ๋‚จ์„œ์ชฝ์œผ๋กœ ํƒ‘๋‹ค์šด ์ˆœํšŒ
00 
10 01 
20 11 02 
30 21 12 03 
40 31 22 13 04 
41 32 23 14 05 
42 33 24 15 06 
43 34 25 16 
44 35 26 
45 36 
46 
# ๋ถ๋™์ชฝ์œผ๋กœ ํƒ‘๋‹ค์šด ์ˆœํšŒ
40 
41 30 
42 31 20 
43 32 21 10 
44 33 22 11 00 
45 34 23 12 01 
46 35 24 13 02 
36 25 14 03 
26 15 04 
16 05 
06

2. ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค.

์ข€ ๋” ๋นจ๋ผ์งˆ๊นŒ๋ด ๋‘ ๋Œ€๊ฐ์„  ์ˆœํšŒ ํ•จ์ˆ˜๋ฅผ ํ•ฉ์ณค๋Š”๋ฐโ€ฆ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์ค„์˜€๋Š”์ง€ ๋ชฐ๋ผ๋„ ๊ฐ€๋…์„ฑ๋„ ์•ˆ ์ข‹๊ณ  ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹คโ€ฆ.๋ฒฝ์—์„œ ์นด์šดํŒ…์ด ์•ˆ ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ๋ฒ„๊ทธ ์žก๋А๋ผ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹คโ€ฆ ์ด๋ ‡๊ฒŒ ์งœ๋ฉด ์•„๋ฌด๋„ ๋ชป ์•Œ์•„๋ณผ ๊ฒƒ ๊ฐ™๋‹ค.

def sw_nw_topdn(arr,h,w,dp): # ๋‚จ๋™ ๋ถ์„œ ๋ฐฉํ–ฅ์œผ๋กœ ๋™์‹œ์— 2D array์ˆœํšŒํ•˜๋Š” ์ฝ”๋“œ
    sw,se,ne,nw = 0,1,2,3 # ๋ฐฉํ–ฅ์„ ํ—ท๊ฐˆ๋ฆด๊นŒ๋ด ์ˆซ์ž ์ฃผ์†Œ ๋Œ€์‹  ๋ณ€์ˆ˜๋ช… ์‚ฌ์šฉ
    for sumid in range(h + w - 1): # ์ธ๋ฑ์Šค ํ•ฉ์„ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ์ˆœํšŒ
        combo_sw,combo_nw = 0,0 # 1๊ฐœ์ˆ˜ ์„ธ๊ธฐ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”
        for y1 in range(h): 
            x1 = sumid - y1
            if 0 <= x1 < w:
                print(arr[y1][x1],end=' ')
                if arr[y1][x1]==1:
                    combo_sw+=1
                    dp[y1][x1][ne]=combo_sw
                    if 0 == x1 or y1 == h-1:
                        for i in range(combo_sw):
                            dp[y1-i][x1+i][sw]= i+1
                        combo_sw=0
            else:
                if combo_sw>0:
                    for i in range(1,combo_sw+1):
                        dp[y1-i][x1+i][sw]= i
                combo_sw=0
            y2 = h-y1-1
            x2 = w - 1 - (sumid - y2)
            if 0 <= x2 < w:
                print(arr[y2][x2],end=' ')
                if arr[y2][x2]==1:
                    combo_nw+=1
                    dp[y2][x2][se]=combo_nw
                    if 0 == x2 or 0 == y2:
                        for i in range(combo_nw):
                            dp[y2+i][x2+i][nw]= i+1
                        combo_nw=0
            else:
                if combo_nw>0:
                    for i in range(1,combo_nw+1):
                        dp[y2+i][x2+i][nw]= i
                combo_nw=0      
        print()

import random
#matrix = [[f"{10*x+y:02d}" for x in range(5)] for y in range(5)]
matrix = [[1 for x in range(6)] for y in range(6)]
#matrix = [[random.randint(0,1) for x in range(8)] for y in range(23)]
h,w = len(matrix),len(matrix[0])
dp=[[[0,0,0,0] for _ in range(w)] for _ in range(h)]
print(*matrix,sep="\\n")
sw_nw_topdn(matrix,h,w,dp)
print(*dp,sep="\\n")
[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]

#์ฝ”๋“œ๋กœ ์ƒ์„ฑ๋œ ๋ฐฐ์—ด์˜ ๋ชจ์Šต
1 1   # ๋‚จ๋™, ๋ถ์„œ๋ฐฉํ–ฅ์œผ๋กœ ๋™์‹œ์—
1 1 1 1   # ๋ฐฐ์—ด์„ ์ฝ์–ด์„œ ์ƒ๊ธด ํŒจํ„ด
1 1 1 1 1 1 
1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 
1 1 1 1 1 1 
1 1 1 1 
1 1
[[1, 6, 1, 1], [2, 5, 1, 1], [3, 4, 1, 1], [4, 3, 1, 1], [5, 2, 1, 1], [6, 1, 1, 1]]
[[1, 5, 2, 1], [2, 5, 2, 2], [3, 4, 2, 2], [4, 3, 2, 2], [5, 2, 2, 2], [5, 1, 1, 2]]
[[1, 4, 3, 1], [2, 4, 3, 2], [3, 4, 3, 3], [4, 3, 3, 3], [4, 2, 2, 3], [4, 1, 1, 3]]
[[1, 3, 4, 1], [2, 3, 4, 2], [3, 3, 4, 3], [3, 3, 3, 4], [3, 2, 2, 4], [3, 1, 1, 4]]
[[1, 2, 5, 1], [2, 2, 5, 2], [2, 2, 4, 3], [2, 2, 3, 4], [2, 2, 2, 5], [2, 1, 1, 5]]
[[1, 1, 6, 1], [1, 1, 5, 2], [1, 1, 4, 3], [1, 1, 3, 4], [1, 1, 2, 5], [1, 1, 1, 6]]
##๋“œ๋””์–ด ์ƒ์„ฑ๋œ dp์ง€๋„!!