๋‚ด ์ธ์ƒ์—์„œ ๋ฏฟ์„ ๊ฑด ์˜ค์ง ๋‚˜ ์ž์‹ ๋ฟ!

The only one you can truly trust is yourself.

๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜• ์ฐพ๊ธฐ

๐ŸŽฎinspirer9 2023. 2. 16. 12:31
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

1์™€ 0๋กœ ์ฑ„์›Œ์ง„ ํ‘œ(board)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘œ 1์นธ์€ 1 x 1 ์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘œ์—์„œ 1๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜•์„ ์ฐพ์•„ ๋„“์ด๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”. (๋‹จ, ์ •์‚ฌ๊ฐํ˜•์ด๋ž€ ์ถ•์— ํ‰ํ–‰ํ•œ ์ •์‚ฌ๊ฐํ˜•์„ ๋งํ•ฉ๋‹ˆ๋‹ค.)

์˜ˆ๋ฅผ ๋“ค์–ด

0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜•์€

0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

๊ฐ€ ๋˜๋ฉฐ ๋„“์ด๋Š” 9๊ฐ€ ๋˜๋ฏ€๋กœ 9๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ์ œํ•œ์‚ฌํ•ญ
  • ํ‘œ(board)๋Š” 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • ํ‘œ(board)์˜ ํ–‰(row)์˜ ํฌ๊ธฐ : 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • ํ‘œ(board)์˜ ์—ด(column)์˜ ํฌ๊ธฐ : 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • ํ‘œ(board)์˜ ๊ฐ’์€ 1๋˜๋Š” 0์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

board answer
[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9
[[0,0,1,1],[1,1,1,1]] 4

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1
์œ„์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
| 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 |
๋กœ ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜•์˜ ๋„“์ด๋Š” 4๊ฐ€ ๋˜๋ฏ€๋กœ 4๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์ง€์„ฑ ํ’€์ด

  • ๊ทธ๋ƒฅ ๋˜๊ฒ ์ง€ ์‹ถ์–ด์„œ ํ’€์—ˆ๋”๋‹ˆ ๋๋„ค?
    • for๋ฌธ์œผ๋กœ ๊ทธ๋ ค๊ฐ€๋ฉด์„œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ƒ์ƒํ•˜๋˜๊ฑฐ ๋‹ค ๋„ฃ๊ณ  ์š”๋ฆฌ์กฐ๋ฆฌ ํ•ด์„œ ํ’€์—ˆ๋‹ค.
    • ๋ˆˆ์— ๋ณด์ด๋Š” ๋ฌธ์ œ๋Š” ์‰ฝ๊ตฌ๋‚˜... ใ…ก.ใ…ก;

  • ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ์žˆ์—ˆ๋„ค?
    • 500ms๋ฉด ๊ฐ€๊นŒ์Šค๋กœ ๋œ ๋“ฏ...
    • ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ๋” ๋น ๋ฅด๊ฒŒ ํ•˜๋ ค๋ฉด ์—ญ์‹œ ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ์จ์•ผ๊ฒ ์ง€?
def solution(board):
    answer = board[0][0]
    for y in range(1, len(board)):
        for x in range(1, len(board[0])):
            if board[y][x] != 0:
                min_value = min(board[y][x-1], board[y-1][x], board[y-1][x-1])
                board[y][x] = min_value + 1
                answer = max(answer, min_value + 1)
    return answer ** 2
    
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.00ms, 10.2MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.06ms, 10MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.08ms, 10.1MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.08ms, 10.2MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.07ms, 10.2MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.3MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (0.05ms, 10.3MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (0.05ms, 9.99MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (0.09ms, 10MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (1.08ms, 10.1MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (1.00ms, 10.1MB)

ํšจ์œจ์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (499.56ms, 31.2MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (474.39ms, 30.7MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (512.72ms, 30.7MB)

๊ณ ์ˆ˜์˜ ํ’€์ด

  • ์•ฝ๊ฐ„ ๋” ๋น ๋ฅธ ๋ฐฉ์‹.
    • ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ณ  +1ํ•˜๋Š” ์—ฐ์‚ฐ๊นŒ์ง€ ์ œ๊ฑฐํ•ด๋ฒ„๋ฆฐ...
    • +1์„ ํ•  ํ•„์š”๊ฐ€ ์—†๊ตฌ๋‚˜, ์–ด์ฐจํ”ผ ๊ทธ ๋ฐฐ์—ด ์•ˆ์— 1์ด ๋“ค์–ด์žˆ์œผ๋‹ˆ๊นŒ ๋”ํ•ด๋ฒ„๋ฆฌ๋ฉด ๋˜๋Š”๊ฑฐ๋„ค...
    • ๊ทธ๋ฆฌ๊ณ  answer์— max...ํ•˜๋Š”๊ฑด ๋งˆ์ง€๋ง‰์œผ๋กœ ๋นผ์„œ ๊ทธ๊ฒƒ๋งŒ ๋Œ๋ฆฌ๋ฉด ๋” ๋น ๋ฆ„
def solution(board):
    answer = 0
    for i in range(1, len(board)) :
        for j in range(1, len(board[0])) :
            if board[i][j] >= 1 :
                board[i][j] += min(board[i-1][j-1],board[i][j-1],board[i-1][j])

    for i in board :
        if answer < max(i) : answer = max(i)
    return answer * answer
    
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.00ms, 10MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.03ms, 10MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.1MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.08ms, 10.3MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.1MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.1MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.04ms, 10MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.1MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.1MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (0.06ms, 10MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (0.07ms, 10.2MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (0.07ms, 9.81MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.1MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (0.88ms, 10.1MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (0.90ms, 10.1MB)

ํšจ์œจ์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (410.92ms, 31.1MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (423.89ms, 30.5MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (425.65ms, 30.8MB)
  • ๊ทธ๋Ÿผ ํ•œ์ค„ ์ฒดํฌ ๋๋‚ฌ์„ ๋•Œ max()๋กœ ๋น„๊ตํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹ˆ๋ƒ?
def solution(board):
    answer = board[0][0]
    for y in range(1, len(board)):
        for x in range(1, len(board[0])):
            if board[y][x] != 0:
                board[y][x] += min(board[y][x-1], board[y-1][x], board[y-1][x-1])
        answer = max(answer, max(board[y]))
    return answer ** 2
    
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.00ms, 10.1MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.4MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.3MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.01ms, 10MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.2MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.2MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.3MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.3MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.3MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.2MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.3MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (0.05ms, 10.3MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (1.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (1.03ms, 10MB)

ํšจ์œจ์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (397.91ms, 31MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (412.73ms, 30.5MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (412.15ms, 30.9MB)
728x90
๋ฐ˜์‘ํ˜•