개발/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 로 감싸주니 해결 ... (?)