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

yunu·2022년 4월 23일
0
post-thumbnail

출처: 프로그래머스 코딩 테스트 연습, [프로그래머스] n^2 배열 자르기

새로 알게된 것들

list.append() # 뒤에 원소를 추가
list.extend() # 뒤에 리스트를 이어붙임

풀이

n의 범위가 1 ≤ n ≤ 10^7와 같이 엄청 크기 때문에 2차원 배열에 담아내는 것이 불가능해보여 각 행의 규칙을 찾아 한 행을 구하여 이어붙였다. 행의 규칙은 n번째 행에는 n이 n번 등장하고 이후는 n+1, n+2 ... m 과 같이 초기화 된다.
1. 시작 행과 끝 행을 구한다.
2. n번째 행의 1차원 배열을 규칙에 따라 만든다.
3. 시작 행과 끝 행이 같은 경우는 처리해준다.
4. 시작 행도 아니고 끝 행도 아닌 경우는 모든 행의 원소를 answer에 추가해준다.

코드

def solution(n, left, right):
    left, right = int(left), int(right) # int()로 감싸주지 않으면 런타임 에러가 발생한다!!
    startX, startY = left % n, left // n
    endX, endY = right % n, right // n
    
    answer = []
    for i in range(startY + 1, endY + 2):
        line = [k + 1 for k in range(n)]
        for j in range(i):
            line[j] = i
        if startY == endY:
            answer.extend(line[startX:endX+1])
        elif i == startY + 1:
            answer.extend(line[startX:])
        elif i == endY + 1:
            answer.extend(line[:endX+1])
        else:
            answer.extend(line)
    
    return answer

다른 사람 풀이를 보며 알게 된 점

나는 각 행의 규칙을 찾았지만 다른 사람들은 각 원소의 규칙을 찾아 보다 쉽고 빠르게 풀었다. 종이에 문제의 규칙을 적어보면서 규칙을 찾는 것이 그냥 메모장에 끄적이며 푸는 것보다 빠를 것 같다. 적으면서 문제 푸는 것을 귀찮아 하지 말자

profile
rip

0개의 댓글