본문 바로가기
알고리즘 & PS

[프로그래머스] n^2 배열 자르기 (Lv 2)

by 다람이도토리 2024. 10. 28.

 

1차 시도

배열을 펼치는 방법으로 접근하였다. 하지만 TLE!

n이 너무 크다. 이런 방식으론 안되지만, 1차 풀이에서 아이디어를 얻을 수 있다.

def solution(n, left, right):
    array = [[0 for _ in range(n)] for _ in range(n)]
    for i in range(n):
        for j in range(n):
            array[i][j] = max([i, j]) + 1

    # 2D -> 1D 로 펼치는 방법 알아두자!
    array_join = []
    for cur_arr in array:
        array_join += cur_arr
        
    return array_join[left:right+1]

2차 시도

우리는 이미 배열을 만들면서, 행과 열의 번호를 보고 들어갈 숫자를 구했다.

배열이 잘리면서 들어갈 때, 책 읽는 순서로 인덱스를 부여한다. 따라서 그냥 n으로 나누면 몇 행 몇 열인지 구할 수 있다.

O(n)으로 해결되는 케이스다. 구석에서 나머지 처리를 신경써주자. 0으로 시작하고, 0번 열로 돌아오니까 

def solution(n, left, right):
    answer = []
    for i in range(left, right+1):
        row = i // n
        col = i % n
        val = max([row, col]) + 1
        answer.append(val)
    return answer