코딩 테스트/프로그래머스

Lv2. n^2 배열 자르기

  • -
728x90
반응형

문제 보기 : n^2 배열 자르기

 

프로그래머스

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

programmers.co.kr


문제

  • 정답률 : 66%

 

 

 

작성 코드

##1
def solution(n, left, right):
    ans = [] ; answer = []
    for nn in range(1,n+1):
        for i in range(nn):
            if i == nn-1:
                ans.append([nn]*nn) #[[1,2][2,2]]
            else:
                ans[i].append(nn)
    for ls in ans:
        answer += ls
    answer = answer[left:right+1]
    return answer

풀이

처음 알고리즘은 이렇게 짰다.

nn번째 시행마다 ans에 저장된 리스트에 nn을 더하고 맨 마지막 리스트엔 [nn]*nn인 리스트를 추가했다.
그리고 answer 리스트에 ans의 작은 리스트를 모두 더하고 left부터 right index까지를 출력한다.
근데 이렇게 알고리즘을 짰을 땐 시간초과와 메모리초과가 났음,,
그럴만도 한게 작은 리스트 전부 만들어야하니까..

그래서 다시 만든 코드는 이렇다.

##2
def solution(n, left, right):
    answer = []
    for i in range(left,right+1):
        x = (i//n)+1
        y = (i%n)+1
        k = max(x,y)
        answer.append(k)
    return answer

​이 알고리즘은 아래를 바탕으로 만들었다.

3x3 행렬로 보자면

(1,1) = 1 (1,2) = 2 (1,3) = 3
(2,1) = 2 (2,2) = 2 (2,3) = 3
(3,1) = 3 (3,2) = 3 (3,3) = 3

이렇게 나타날 수 있고 left=2, right=5이면 [3,2,2,3]을 출력해야하는데

여기에 속하는 (1,3), (2,1), (2,2), (2,3)은 ((left//n)+1, (left%n)+1)로 나타낼 수 있으며

이 두개의 값 중 큰 값이 출력 리스트에 입력해야하는 값이다.

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv3. 정수 삼각형  (0) 2024.07.17
Lv2. 피로도  (0) 2024.07.17
Lv2. 행렬의 곱셈  (0) 2024.07.16
Lv2. N개의 최소공배수  (0) 2024.07.15
Lv2. 점프와 순간이동  (0) 2024.07.15
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.