문제 참고
코드 작성
def solution(n, left, right):
answer = []
cnt_l = left % n
length = right - left + 1
k, cnt = 0, 0
while True:
cnt += n
if cnt >= left:
break
else:
k += 1
leng = [i for i in range(1, n + 1)]
for i in range(0, k):
leng[i] = k + 1
for i in range(n):
answer += leng
if len(answer) >= length + cnt_l:
return answer[cnt_l:cnt_l + length]
k += 1
for j in range(0, k):
leng[j] += 1
return answer[cnt_l:cnt_l + length]
- left가 있는 위치보다 배열의 길이가 짧다면 배열을 만들 필요가 없으므로 k += 1
- left까지 도달하면 배열을 만들어서 슬라이싱
다른사람 풀이
solution = lambda n, left, right: list((max(i // n, i % n) + 1 for i in range(left, right + 1)))
[1 2 3]
[2 2 3]
[3 3 3]
을 잘보면 각 행열 위치로 max(i//n, i%n) + 1이 성립함을 알 수 있다..
따라서 위처럼 1줄로 리스트 생성할 수 있음