https://programmers.co.kr/learn/courses/30/lessons/87390
풀이 과정
- n의 범위가 10의 7승까지이므로 실제로 해보는건 불가능하다.
- left와 right가 현재 몇행 몇열에 있는지 구한다.
- 행의 경우 // 연산으로, 열의 경우 % 연산으로 구한다.
- 문제를 보면, i행의 경우 i열까진 값이 i이고 i+1열부터는 값이 열과 같다.(i+1)
- 따라서, left의 행,열에서 시작해서 right의 행,열까지 순서대로 이동하면서 값을 넣어주면 된다.
- left의 행일때는 left의 열~N열까지 단, left의 행과 right의 행이 같은 경우는 left의 열 ~ right의 열까지
- left의 행 + 1 ~ right의 행 - 1 구간에서는 (1~N열)
- right의 행에서는 1~right의 열까지
- 값을 넣어줄 때는 i행에서 i열까지는 i를 넣어주고, 이후에는 열에 맞추어서 넣어주면 된다.
소스 코드
def solution(n, left, right):
answer = []
sr, sc = (left // n)+1, (left % n)+1
er, ec = (right // n)+1, (right % n)+1
if sr == er:
for j in range(sc, ec+1):
if j <= sr:
answer.append(sr)
else:
answer.append(j)
return answer
else:
for j in range(sc, n+1):
if j <= sr:
answer.append(sr)
else:
answer.append(j)
for i in range(sr+1, er):
for j in range(1, n+1):
if j <= i:
answer.append(i)
else:
answer.append(j)
for j in range(1, ec+1):
if j <= er:
answer.append(er)
else:
answer.append(j)
return answer
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 3 ] [ 이분 탐색 ] 금과 은 운반하기 (0) | 2021.12.26 |
---|---|
[ Lv 3 ] [ DP ] 스티커 모으기 (0) | 2021.12.22 |
[ 위클리 챌린지 ] [ 12주차 ] 피로도 (0) | 2021.10.25 |
[ 위클리 챌린지 ] [ 11주차 ] 아이템 줍기 (0) | 2021.10.19 |
[ 위클리 챌린지 ] [ 10주차 ] 교점에 별 만들기 (0) | 2021.10.12 |