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

이진규·2022년 3월 13일
1

프로그래머스(PYTHON)

목록 보기
43/64

문제

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

나의 코드 (답안참조)

"""
1. 아이디어

2. 시간복잡도

"""

""" 옛날 코드
def solution(n, left, right):
    
    answer = []
    left, right = int(left), int(right)
    
    for i in range(left, right+1):
        
        answer.append(max(divmod(i, n)) + 1)
        
    return answer
""" 
 
def solution(n, left, right):
    
    answer = []
    
    for i in range(left, right+1):
        answer.append(max(divmod(i, n)) + 1)
    
    return answer
    

설명

이걸 생각하기 굉장히 어렵지 않나..
그리고 left, right = int(left), int(right) 이 부분이 없으면 통과가 안되는데 그 이유는 아무도 모른다;; (문제 답안이 수정된거 같다.)

일단 n의 범위가 1 ≤ n ≤ 10^7이기 때문에 n을 가지고 반복문을 돌려 해결하려는 것은 생각하지 말아야 하고 left, right를 가지고 반복문을 돌려 해결해야 한다는 힌트를 가지고 문제를 접근해야 한다.

다시 풀이한 코드 (틀림)


def solution(n, left, right):
    
    arr = [ [0] * n for _ in range(n) ]
    answer = []
    
    for i in range(n):
        for j in range(i+1):
            arr[i][j] = i+1
            arr[j][i] = arr[i][j]
            
    for i in range(left, right+1):
        
        a = i // n
        b = i % n
        answer.append(arr[a][b])
    
    return answer
    

n의 범위가 1 <= n <= 10^7 이기 때문에 다음과 같은 이중 반복문은 생각은 좋았던것 같은데 시간 초과가 난다. (배열의 대칭성 이용)

근데 위의 모범 정답을 생각하기에도 너무 힘들지 않나..

참고자료

X

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글