daniel7481의 개발일지

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

프로그래머스

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

daniel7481 2022. 8. 16. 14:56
반응형

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

 

프로그래머스

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

programmers.co.kr

풀이

하드코딩 구현 문제였다. 방법 자체는 생각하기 쉬우나 구현하기가 좀 까다러웠다. 2차원 배열이 1차원으로 옮겨갈 때 각 원소들이 어떤값을 가질까가 관건이었는데, 먼저 시작 인덱스를 정해야했다. 행과 열(i, j)는 각각 left//n, left%n이다. 2차원을 1차원으로 옮길때 행과 열의 성질을 생각해보면 쉽게 구할 수 있다. 이제 시작 인덱스를 알았으니 행과 열의 대소 관계에 따른 2차원 원소의 값을 생각해보면, 만약 i가 j보다 작거나 같다면 원소는 j의 값을 갖는다(j열의 원소들은 j행까지 j이다). 반대로 i가 j보다 크다면 i의 값을 갖는다(i행의 원소들은 i열까지 i의 값을 갖는다). 이 성질을 이용하여 i, j를 하나씩 이동시켜주며 만약 열 인덱스가 매트릭스를 벗어난다면 행 인덱스를 하나 더해주고 0으로 바꿔주는 연산을 하고, 이 과정을 right-left+1만큼 해주어야하기 때문에 while문을 돌려주면 정답을 얻을 수 있다.

def solution(n, left, right):
    answer = []
    i = left//n
    j = left%n
    cnt = 0
    while cnt < right-left+1:
        if i <= j:
            answer.append(j+1)
        else:
            answer.append(i+1)
        j += 1
        if j == n:
            j = 0
            i += 1
        cnt += 1
    return answer
반응형