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

The only one you can truly trust is yourself.

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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ๊ฑด๋ฌผ (2022 KAKAO BLIND RECRUITMENT)

๐ŸŽฎinspirer9 2023. 3. 6. 18:30
728x90
๋ฐ˜์‘ํ˜•

์ด๊ฑด ๊ทธ๋ƒฅ ํ•ด์„ค๋ณด๊ณ  ํ’€์—ˆ๋‹ค.

๋ฌธ์ œ ์„ค๋ช…

[๋ณธ ๋ฌธ์ œ๋Š” ์ •ํ™•์„ฑ๊ณผ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ๊ฐ๊ฐ ์ ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.]

N x M ํฌ๊ธฐ์˜ ํ–‰๋ ฌ ๋ชจ์–‘์˜ ๊ฒŒ์ž„ ๋งต์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งต์—๋Š” ๋‚ด๊ตฌ๋„๋ฅผ ๊ฐ€์ง„ ๊ฑด๋ฌผ์ด ๊ฐ ์นธ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์€ ์ด ๊ฑด๋ฌผ๋“ค์„ ๊ณต๊ฒฉํ•˜์—ฌ ํŒŒ๊ดดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฑด๋ฌผ์€ ์ ์˜ ๊ณต๊ฒฉ์„ ๋ฐ›์œผ๋ฉด ๋‚ด๊ตฌ๋„๊ฐ€ ๊ฐ์†Œํ•˜๊ณ  ๋‚ด๊ตฌ๋„๊ฐ€ 0์ดํ•˜๊ฐ€ ๋˜๋ฉด ํŒŒ๊ดด๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์•„๊ตฐ์€ ํšŒ๋ณต ์Šคํ‚ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฑด๋ฌผ๋“ค์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ ์˜ ๊ณต๊ฒฉ๊ณผ ์•„๊ตฐ์˜ ํšŒ๋ณต ์Šคํ‚ฌ์€ ํ•ญ์ƒ ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ์‚ฌ์ง„์€ ํฌ๊ธฐ๊ฐ€ 4 x 5์ธ ๋งต์— ๋‚ด๊ตฌ๋„๊ฐ€ 5์ธ ๊ฑด๋ฌผ๋“ค์ด ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋กœ ์ ์ด ๋งต์˜ (0,0)๋ถ€ํ„ฐ (3,4)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 4๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ ์ ์ด ๋งต์˜ (2,0)๋ถ€ํ„ฐ (2,3)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 2๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด 4๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋˜๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ๋กœ ์•„๊ตฐ์ด ๋งต์˜ (1,0)๋ถ€ํ„ฐ (3,1)๊นŒ์ง€ ํšŒ๋ณตํ•˜์—ฌ 2๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด 2๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋˜์—ˆ๋‹ค๊ฐ€ ๋ณต๊ตฌ๋˜๊ณ  2๊ฐœ์˜ ๊ฑด๋ฌผ๋งŒ ํŒŒ๊ดด๋˜์–ด์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์ด ๋งต์˜ (0,1)๋ถ€ํ„ฐ (3,3)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 1๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด 8๊ฐœ์˜ ๊ฑด๋ฌผ์ด ๋” ํŒŒ๊ดด๋˜์–ด ์ด 10๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋œ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. (๋‚ด๊ตฌ๋„๊ฐ€ 0 ์ดํ•˜๊ฐ€ ๋œ ์ด๋ฏธ ํŒŒ๊ดด๋œ ๊ฑด๋ฌผ๋„, ๊ณต๊ฒฉ์„ ๋ฐ›์œผ๋ฉด ๊ณ„์†ํ•ด์„œ ๋‚ด๊ตฌ๋„๊ฐ€ ํ•˜๋ฝํ•˜๋Š” ๊ฒƒ์— ์œ ์˜ํ•ด์ฃผ์„ธ์š”.)

์ตœ์ข…์ ์œผ๋กœ ์ด 10๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด board์™€ ์ ์˜ ๊ณต๊ฒฉ ํ˜น์€ ์•„๊ตฐ์˜ ํšŒ๋ณต ์Šคํ‚ฌ์„ ๋‚˜ํƒ€๋‚ด๋Š” 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด skill์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ ์˜ ๊ณต๊ฒฉ ํ˜น์€ ์•„๊ตฐ์˜ ํšŒ๋ณต ์Šคํ‚ฌ์ด ๋ชจ๋‘ ๋๋‚œ ๋’ค ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ๊ฑด๋ฌผ์˜ ๊ฐœ์ˆ˜๋ฅผ returnํ•˜๋Š” solutionํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ board์˜ ํ–‰์˜ ๊ธธ์ด (= N) ≤ 1,000
  • 1 ≤ board์˜ ์—ด์˜ ๊ธธ์ด (= M) ≤ 1,000
  • 1 ≤ board์˜ ์›์†Œ (๊ฐ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„) ≤ 1,000
  • 1 ≤ skill์˜ ํ–‰์˜ ๊ธธ์ด ≤ 250,000
  • skill์˜ ์—ด์˜ ๊ธธ์ด = 6
  • skill์˜ ๊ฐ ํ–‰์€ [type, r1, c1, r2, c2, degree]ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • type์€ 1 ํ˜น์€ 2์ž…๋‹ˆ๋‹ค.
      • type์ด 1์ผ ๊ฒฝ์šฐ๋Š” ์ ์˜ ๊ณต๊ฒฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.
      • type์ด 2์ผ ๊ฒฝ์šฐ๋Š” ์•„๊ตฐ์˜ ํšŒ๋ณต ์Šคํ‚ฌ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
    • (r1, c1)๋ถ€ํ„ฐ (r2, c2)๊นŒ์ง€ ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ๋ฒ”์œ„ ์•ˆ์— ์žˆ๋Š” ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ degree ๋งŒํผ ๋‚ฎ์ถ”๊ฑฐ๋‚˜ ๋†’์ธ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
      • 0 ≤ r1 ≤ r2 < board์˜ ํ–‰์˜ ๊ธธ์ด
      • 0 ≤ c1 ≤ c2 < board์˜ ์—ด์˜ ๊ธธ์ด
      • 1 ≤ degree ≤ 500
      • type์ด 1์ด๋ฉด degree๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.
      • type์ด 2์ด๋ฉด degree๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
  • ๊ฑด๋ฌผ์€ ํŒŒ๊ดด๋˜์—ˆ๋‹ค๊ฐ€ ํšŒ๋ณต ์Šคํ‚ฌ์„ ๋ฐ›์•„ ๋‚ด๊ตฌ๋„๊ฐ€ 1์ด์ƒ์ด ๋˜๋ฉด ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ตœ์ข…์ ์œผ๋กœ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 1์ด์ƒ์ด๋ฉด ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ๊ฑด๋ฌผ์ž…๋‹ˆ๋‹ค.

์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ board์˜ ํ–‰์˜ ๊ธธ์ด (= N) ≤ 100
  • 1 ≤ board์˜ ์—ด์˜ ๊ธธ์ด (= M) ≤ 100
  • 1 ≤ board์˜ ์›์†Œ (๊ฐ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„) ≤ 100
  • 1 ≤ skill์˜ ํ–‰์˜ ๊ธธ์ด ≤ 100
  • 1 ≤ degree ≤ 100

์ œํ•œ์‹œ๊ฐ„ ์•ˆ๋‚ด

  • ์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ : 10์ดˆ
  • ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ : ์–ธ์–ด๋ณ„๋กœ ์ž‘์„ฑ๋œ ์ •๋‹ต ์ฝ”๋“œ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์˜ ์ ์ • ๋ฐฐ์ˆ˜

ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ œํ•œ ์‚ฌํ•ญ

  • ์ฃผ์–ด์ง„ ์กฐ๊ฑด ์™ธ ์ถ”๊ฐ€ ์ œํ•œ์‚ฌํ•ญ ์—†์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

board skill result
[[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5]] [[1,0,0,3,4,4],[1,2,0,2,3,2],[2,1,0,3,1,2],[1,0,1,3,3,1]] 10
[[1,2,3],[4,5,6],[7,8,9]] [[1,1,1,2,2,4],[1,0,0,1,1,2],[2,2,0,2,0,100]] 6

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

์ž…์ถœ๋ ฅ ์˜ˆ #1

๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

<์ดˆ๊ธฐ ๋งต ์ƒํƒœ>

์ฒซ ๋ฒˆ์งธ๋กœ ์ ์ด ๋งต์˜ (1,1)๋ถ€ํ„ฐ (2,2)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 4๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ ์ ์ด ๋งต์˜ (0,0)๋ถ€ํ„ฐ (1,1)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 2๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์•„๊ตฐ์ด ๋งต์˜ (2,0)๋ถ€ํ„ฐ (2,0)๊นŒ์ง€ ํšŒ๋ณตํ•˜์—ฌ 100๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋ฉ๋‹ˆ๋‹ค.

์ด, 6๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 6์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ’€์ด

def solution(board, skill):
    answer = 0
    n = len(board)+1
    m = len(board[0])+1
    board_csum = [[0 for _ in range(m)] for _ in range(n)]
    
    for sk in skill:
        s_type, r1, c1, r2, c2, degree = sk
        if s_type == 1:
            degree *= -1
        board_csum[r1][c1] += degree
        board_csum[r1][c2+1] += degree * -1
        board_csum[r2+1][c1] += degree * -1
        board_csum[r2+1][c2+1] += degree
        
    for i in range(n):
        for j in range(1, m):
            board_csum[i][j] += board_csum[i][j-1]
    for j in range(m):
        for i in range(1,n):
            board_csum[i][j] += board_csum[i-1][j]
    
    for i in range(n-1):
        for j in range(m-1):
            board[i][j] += board_csum[i][j]
            if board[i][j] > 0:
                answer += 1
                
    return answer
    
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.07ms, 10.4MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.22ms, 10.4MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.44ms, 10.1MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.79ms, 10.3MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (2.47ms, 10.3MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (1.63ms, 10.2MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (2.45ms, 10.5MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (2.96ms, 10.5MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (9.23ms, 10.4MB)
ํšจ์œจ์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (880.75ms, 144MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (885.96ms, 144MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (895.76ms, 144MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (775.16ms, 144MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (669.92ms, 133MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (621.84ms, 133MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (711.07ms, 133MB)
  • ๋‚œ์ด๋„๊ฐ€ ๋†’์•„์งˆ์ˆ˜๋ก ํ’€์ด์˜ ๋‹ค์–‘์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.
728x90
๋ฐ˜์‘ํ˜•