본문 바로가기
Algorithm/Programmers

[Programmers / Level2] n^2 배열 자르기

by 개복취 2024. 1. 26.

https://school.programmers.co.kr/learn/courses/30/lessons/87390

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

< 코드 - 오답>

from itertools import chain
def solution(n, left, right):
    list_n = [[0] * n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            list_n[i][j] = max(i, j) + 1
    return (list(chain.from_iterable(list_n))[left:right+1])

-> 시간초과나서 장렬하게 사망.. 이차원리스트를 만들어서 그걸 또 1차원배열로 평탄화 시키는게 시간복잡도를 많이 잡아먹는 이슈가 생겼다.

max(row, col) + 1 통해 문제에서 요구하는대로 숫자를 집어넣는 아이디어지만 결국 1차원배열로 가져가아하기 때문에 다르게 생각해야한다.

 

<정해코드>

def solution(n, left, right):
    answer = []
    for i in range(left, right + 1):
        # 행과 열의 인덱스 계산
        row = i // n
        col = i % n
        # 2차원 배열의 규칙에 따라 값을 계산
        answer.append(max(row, col) + 1)
    return answer

 

2차원 배열의 행과 열의 인덱스를 구하기 위해 행은 i%n 열은 i // n 으로 접근하여 구하면 된다.