🧩 Algorithm/SWEA

[SWEA] 2805. λ†μž‘λ¬Ό μˆ˜ν™•ν•˜κΈ° (Python/D3)

devCloud 2024. 10. 24. 12:13
728x90

[문제 링크] πŸ‘‡

 

SW Expert Academy

SW ν”„λ‘œκ·Έλž˜λ° μ—­λŸ‰ 강화에 도움이 λ˜λŠ” λ‹€μ–‘ν•œ ν•™μŠ΅ 컨텐츠λ₯Ό ν™•μΈν•˜μ„Έμš”!

swexpertacademy.com


 

풀이

sol.1

  • 쀑심 계산
    • 농μž₯의 쀑심은 둜 κ΅¬ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 일 λ•Œ 쀑심은 2번째 행이닀.
  • 각 ν–‰μ—μ„œ μˆ˜ν™• λ²”μœ„ 계산
    • 각 ν–‰λ§ˆλ‹€ μˆ˜ν™• λ²”μœ„μ˜ μ‹œμž‘μ μ€ μ€‘μ‹¬μ—μ„œ μ–Όλ§ˆλ‚˜ λ–¨μ–΄μ Έ μžˆλŠ”μ§€μ— 따라 κ²°μ •λœλ‹€. 즉, 둜 ꡬ할 수 μžˆλ‹€.
    • 끝점은 둜 κ³„μ‚°ν•˜μ—¬ κ·Έ λ²”μœ„κΉŒμ§€ μˆ˜ν™•ν•  수 μžˆλ‹€.
  • 수읡 계산
    • μˆ˜ν™• κ°€λŠ₯ν•œ λ²”μœ„μ˜ λ†μž‘λ¬Όλ“€μ„ sum ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ λ”ν•œ ν›„, κ·Έ 값을 λˆ„μ ν•˜μ—¬ μ΅œμ’… μˆ˜μ΅μ„ κ³„μ‚°ν•œλ‹€.

 

 

sol.2

  • start와 end둜 μˆ˜ν™•ν•  수 μžˆλŠ” μ—΄μ˜ λ²”μœ„λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
  • μ²˜μŒμ—λŠ” 쀑심열 ν•˜λ‚˜λ§Œ μˆ˜ν™•ν•œλ‹€. 즉, start = end = n // 2둜 μ„€μ •λœλ‹€.
  • μœ—λΆ€λΆ„μ—μ„œλŠ” 각 ν–‰λ§ˆλ‹€ startλŠ” 쀄어듀고, endλŠ” 컀진닀. 즉, μœ„μ—μ„œ λ‚΄λ €μ˜¬μˆ˜λ‘ μˆ˜ν™• λ²”μœ„κ°€ λ„“μ–΄μ§„λ‹€λŠ” 것이닀.
  • 쀑심 μ΄ν›„λ‘œλŠ” startλŠ” μ¦κ°€ν•˜κ³ , endλŠ” 쀄어든닀. 즉, μ•„λž˜λ‘œ λ‚΄λ €κ°ˆμˆ˜λ‘ μˆ˜ν™• λ²”μœ„κ°€ 쒁아진닀.
  • 각 ν–‰μ—μ„œ μˆ˜ν™• λ²”μœ„(startμ—μ„œ endκΉŒμ§€)의 λ†μž‘λ¬Ό 값을 λ”ν•˜μ—¬ result에 λˆ„μ ν•œλ‹€.

 

 

 

Solution

sol.1

def harvest_profit(n, farm):
    center = n // 2 #농μž₯의 쀑심
    result = 0
    for i in range(n):
        #ν–‰ iμ—μ„œ μˆ˜ν™• κ°€λŠ₯ν•œ λ²”μœ„
        start = abs(center - i)  # μ‹œμž‘μ  (μ€‘μ‹¬μ—μ„œ λ–¨μ–΄μ§„ 거리만큼 μ‹œμž‘μ  이동)
        end = n - start  # 끝점
        result += sum(farm[i][start:end])  # ν•΄λ‹Ή ν–‰μ˜ μˆ˜ν™• λ²”μœ„μ˜ 값듀을 더함
    return result

test_case = int(input())
for tc in range(1, test_case + 1):
    n = int(input()) #농μž₯ 크기
    farm = [list(map(int, input())) for _ in range(n)] 
    result = harvest_profit(n, farm)
    print("#%d %d" %(tc, result))

 

sol.2

test_case = int(input())
for tc in range(1, test_case + 1):
    n = int(input()) #농μž₯ 크기
    farm = [list(map(int, input())) for _ in range(n)] 
    result = 0
    start, end = n // 2, n // 2

    for i in range(n):
        for j in range(start, end + 1):
            result += farm[i][j]
        if i < n // 2: #쀑간 ν–‰ κΈ°μ€€μœΌλ‘œ μœ„μͺ½ 계산
            start -= 1
            end += 1
        else: #쀑간 ν–‰ κΈ°μ€€μœΌλ‘œ μ•„λž˜μͺ½ 계산
            start += 1
            end -= 1
    print("#%d %d" %(tc, result))

 

 

 

πŸ‘©‍πŸ’» 회고

μ–΄λ–»κ²Œ ν’€μ–΄μ•Όν• μ§€ λ§‰λ§‰ν–ˆλ˜ λ¬Έμ œλ‹€. 풀이λ₯Ό 보면 간단해 λ³΄μ΄μ§€λ§Œ ν’€ 방법이 잘 λ– μ˜€λ₯΄μ§„ μ•ŠλŠ”λ‹€. λ‹€μ‹œ 풀어봐야 ν•  λ¬Έμ œμ΄λ‹€.


 

728x90