문제
https://school.programmers.co.kr/learn/courses/30/lessons/87390?language=python3
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
해당 문제는 n이 주어질 때 n^2의 임의의 배열이 형성된다.
n^2배열의 값은 i, j가 각각 행과 열이라고 한다면 Array[i][j]값은 max(i, j)이다.
이렇게 됐을 때 left, right가 추가적으로 주어지고 해당 2차원 배열을 1차원 배열이라고 생각하고 Array[left:right]를 출력하면 된다.
n의 값이 10^7이기 때문에 배열을 형성하고 출력하려고 하면 안 된다.
left, right의 간격 차이가 10^5이기 때문에 이 점에서 left부터 right까지의 값을 각각 계산 후 answer를 만들려고 해야 한다.
left값을 갖고 row, column의 값을 도출해낼 수 있다.
left을 n으로 나누면 행이 나오고, n으로 나눈 나머지가 열의 값이 된다.
고로 left부터 right까지 값을 answer에 넣어주면 된다.
정답코드
더보기
'''
'25. 08. 30
1. n, left, right가 주어진다.
2. n^2배열을 만든다.
3. 해당 left, right까지 수를 자른다.
제한이 n <= 10^7
right - left < 10^5
단순히 n^2을 만들고 left, right를 내는 문제가 아님.
table[i][j] => max(i, j)값으로 채우는데
일차항으로 바꾸게 되면 어떻게 될까
[row][col], [row, col + 1], [row, col + 2], [row, col + 3]
[row + 1][col], ...
left가 어디부터 right로 가는지만 알면 될것 같은데?
left가 만약 7이면
n이 4이기 때문에 한 행에 4개의 열이 있으므로
원래 행과 열을 체크할 수 있다.
거기부터 하나씩 체크하여 right까지 가면 된다.
left -> right까지는 10^5이므로 한 개씩 커지면서 넣어도 됨.
'''
def solution(n, left, right):
answer = []
row, col = left // n + 1, left % n + 1
alpha = 0
while left + alpha <= right:
answer.append(max(row, col))
col += 1
if col > n:
col = 1
row += 1
alpha += 1
return answer
깃허브 : https://buly.kr/Awfr2In
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 구현 / 행렬의 곱셈 (0) | 2025.08.31 |
|---|---|
| 프로그래머스 / 정렬, 이분탐색 / H-Index (0) | 2025.08.31 |
| 프로그래머스 / 스택 / 괄호 회전하기 (0) | 2025.08.24 |
| 프로그래머스 / 슬라이딩 윈도우 / 할인 행사 (0) | 2025.08.24 |
| 프로그래머스 / 슬라이딩 윈도우 / 연속 부분 수열 합의 개수 (0) | 2025.08.24 |