https://programmers.co.kr/learn/courses/30/lessons/87390
"""
1. 아이디어
2. 시간복잡도
"""
""" 옛날 코드
def solution(n, left, right):
answer = []
left, right = int(left), int(right)
for i in range(left, right+1):
answer.append(max(divmod(i, n)) + 1)
return answer
"""
def solution(n, left, right):
answer = []
for i in range(left, right+1):
answer.append(max(divmod(i, n)) + 1)
return answer
이걸 생각하기 굉장히 어렵지 않나..
그리고 left, right = int(left), int(right) 이 부분이 없으면 통과가 안되는데 그 이유는 아무도 모른다;; (문제 답안이 수정된거 같다.)
일단 n의 범위가 1 ≤ n ≤ 10^7이기 때문에 n을 가지고 반복문을 돌려 해결하려는 것은 생각하지 말아야 하고 left, right를 가지고 반복문을 돌려 해결해야 한다는 힌트를 가지고 문제를 접근해야 한다.
def solution(n, left, right):
arr = [ [0] * n for _ in range(n) ]
answer = []
for i in range(n):
for j in range(i+1):
arr[i][j] = i+1
arr[j][i] = arr[i][j]
for i in range(left, right+1):
a = i // n
b = i % n
answer.append(arr[a][b])
return answer
n의 범위가 1 <= n <= 10^7 이기 때문에 다음과 같은 이중 반복문은 생각은 좋았던것 같은데 시간 초과가 난다. (배열의 대칭성 이용)
근데 위의 모범 정답을 생각하기에도 너무 힘들지 않나..
X