지원연구소 공식 블로그

[PROGRAMMERS] 이차원 배열 대각선 순회하기(LV. 0) - Python 본문

코딩테스트/프로그래머스

[PROGRAMMERS] 이차원 배열 대각선 순회하기(LV. 0) - Python

지원연구소 2024. 5. 1. 22:36

[ 문제 ]

2차원 배열 board와 정수 k가 주어집니다. i + j <= k 를 만족하는 모든 (i, j)에 대한 board[i][j] 의 합을 return 하는 solution 함수를 완성해 주세요.

 

 

 

[ 제한사항 ]

  • 1 ≤ board의 길이 ≤ 100
  • 1 ≤ board[i]의 길이 ≤ 100
  • 1 ≤ board[i][j] ≤ 10,000
  • 모든 board[i]의 길이는 같습니다.
  • 0 ≤ k < board의 길이 + board[i]의 길이

 

 

[ 입출력 예 ]

board k result
[[0, 1, 2],[1, 2, 3],[2, 3, 4],[3, 4, 5]] 2 8

 

< 입출력 예 #1의 board를 표로 나타내면 다음과 같습니다. >

i \ j 0 1 2
0 0 1 2
1 1 2 3
2 2 3 4
3 3 4 5
  • i + j가 2보다 작거나 같은 항들의 합은 0 + 1 + 2 + 1 + 2 + 2 = 8이므로 8을 return 합니다.

 

 

[ 해결 방법 ]

1. board[0]에서 board[0][k]까지의 합을 구하면 i = 0, j = 0부터 k까지 이므로 i + j <= k
2. board[1]에서 board[1][k-1]까지의 합을 구하면 i = 1, j = 0부터 k-1까지 이므로 i + j <= k
.....
3. board[k]에서 board[0]까지의 합을 구하면 i = k, j = 0이므로 i + j <= k
4. 이런 방식으로 i는 0부터 k까지, j는 k부터 0까지 반복하면서 합을 구한다.

 

 

 

[ solution.py ]

def solution(board, k):
    answer = 0
    
    for i in board:
        answer += sum(i[0 : k+1])
        k -= 1
        if k < 0:
            break
            
    return answer
  • while 반복문을 사용하면 런타임 에러가 뜨는 듯 하다.

 

 

> 🌻피드백은 언제나 환영입니다🌻 <