본문 바로가기

Algorithm/프로그래머스

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

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

 

프로그래머스

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

programmers.co.kr

 

 

1. 해결방법

left와 right의 값으로 해당 위치의 값을 찾을 방법을 고민해보기 시작했고 그 결과 위치값에서 n을 나눠준 나머지와 몫 중 큰 값이 1을 더해준 값이 해당 위치의 값이라는 사실을 알게 되었다.

 

 

2. 정답코드

(1)

def solution(n, left, right):
    answer = []
    for i in range(1, n + 1):
        for j in range(1, n + 1):
            answer.append(max(i, j))
        
    return answer[left:right + 1]
2중 for문을 사용하면 간단하게 해결되는 문제지만 n의 범위로 인해서 시간 복잡도가 오버플로가 돼버려 대부분의 테스트가 시간초과로 나온다.

실패...

 

(2)

def solution(n, left, right):
    answer = []
    for i in range(left, right + 1):
        answer.append(max(i // n, i % n) + 1)
        
    return answer
솔직히 아이디어를 구현하는데 있어서 많이 힘들었다. 다른 분들의 블로그를 참고하지 않았으면 못풀었을 만큼 아이디어를 생각해내기가 어려웠다.

그래도 좀 더 많이 풀다보면 감이 잡힐 것 같다는 희망도 동시에 얻은 것 같다!