개발/algorithm
[프로그래머스][level2] n^2 배열 자르기 -python
zzi_on2
2022. 3. 30. 15:20
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/87390
코딩테스트 연습 - n^2 배열 자르기
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부
programmers.co.kr
풀이
- 문제에 나와있는 그대로 배열 만들어서 1차원 배열로 변경 후 자르기 : 당연히 시간 초과
def solution(n, left, right):
graph = [ [0] * n for _ in range(n) ]
for i in range(n):
for j in range(i+1):
graph[i][j] = i+1
for j in range(i+1, n):
graph[i][j] = j+1
answer = []
for i in graph:
answer.extend(i)
return answer[left:right+1]
- 규칙이 존재
2차원 배열의 인덱스 i, j는 1차원 배열로 바꾸었을 때의 index 번호를 k라고 하면
i = k // n
j = k % n 이고, 들어가는 숫자는 i와 j 중 큰 숫자 +1 이다.
따라서 left 와 right는 1차원 배열로 바꿨을 때의 index 번호이므로 해당 부분만 값을 구해서 배열에 넣어주면 된다.
def solution(n, left, right):
answer = []
for i in range(int(left),int(right)+1):
# 몫
a = i // n
# 나머지
b = i % n
# 둘 중 큰 값 + 1
if a > b :
answer.append(a+1)
else:
answer.append(b+1)
return answer
+ 테스트 케이스 12, 13번이 런타임 에러가 발생했는데 left와 right를 int 로 감싸주니 해결 ... (?)