https://programmers.co.kr/learn/courses/30/lessons/87390
✅ Solution
- left, right를 통해 해당되는 row들의 값만 구하는 것이 시간 초과 나지 않게 푸는 방법이다.
- left % n, right % n 은 몇 번째 row인지를 나타낸다.
- 즉, left~right의 값은 left % n 번째 row부터 right % n 번째 row 사이에 존재한다.
- 2차원 배열을 먼저 해당 row + 1 값으로 채워준다.
- n = 3 일 때, [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
- 그 후, 2차원 배열의 값을 변경해준다.
- 이때, 배열의 값은 해당 column 이 row + 1 때부터 변하므로 처음이 아니라 그 부분부터 바꿔준다.
- 예를 들어 첫 번째 열에서는 두 번째 행부터, 두 번째 열에서는 세 번째 행부터 값이 1씩 커진다.
- 이를 인덱스로 표현하면 row:0 -> column: 1일 때부터, row: 1 -> column: 2 일 때
- [[1, 2, 3], [2, 2, 3], [3, 3, 3]]
- 이렇게 left~right 값이 들어있는 2차원 배열을 구하고 나면 이를 1차원 배열로 바꾸고
- left, right의 1차원 배열에서의 인덱스를 구해 답을 리턴한다.
✅ Code
def solution(n, left, right):
answer = []
start_row, end_row = left // n, right // n
start_idx, end_idx = left % n, left % n + right - left
data = [[x+1 for _ in range(n)] for x in range(start_row, end_row + 1)]
temp = []
for i in range(len(data)):
for j in range(start_row + i + 1, n):
data[i][j] = data[i][j-1] + 1
for d in data:
temp.extend(d)
answer = temp[start_idx:end_idx + 1]
return answer
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level 2 - 가장 큰 정사각형 찾기 (Python) (0) | 2022.06.27 |
---|---|
[프로그래머스] Level 2 - 쿼드압축 후 개수 세기 (Python) (0) | 2022.06.25 |
[프로그래머스] Level 2 - 3xn 타일링 (Python) (0) | 2022.06.25 |
[프로그래머스] Level 2 - 구명보트 (Python) (0) | 2022.06.24 |
[프로그래머스] Level 2 - 영어 끝말잇기 (Python) (0) | 2022.06.24 |