알고리즘 (JAVA)/프로그래머스 알고리즘

[코테준비 - python] n^2 배열자르기 level2 - 개발자배찌

개발자 배찌 2023. 1. 2. 17:34
728x90


💗풀이과정💗
입력값 = n, left, right
1. n*n의 2차원 배열을 만든다. 값은 0으로 초기화
2. i * i 행까지 값을 i로 넣는다.
3. 2차원 배열을 1차원 배열로 만든다.
4. 해당 배열에서 left부터 right까지의 배열만 쪼갠다

일단 여기서 막혔던 부분은
2번.. "i * i 행 까지 값을 i로 넣는다"
이게 죽어도 안구해졌다.

다른사람의 풀이를 보니,
나처럼 위 풀이방법으로 하면 시간초과가 뜬다고 한다.
아무리 발악해도 안되는 문제풀이였다..

규칙을 찾아내야한다!!

그치만 아무리 생각해도 규칙도 찾아지지도않음..
여기 밑에 까지는 생각해냄.. !

n이 3일때
(0,0)(0,1)(0,2)
(1,0)(1,1)(1,2)
(2,0)(2,1)(2,2)

Max값으로 따지면
0 1 2
1 1 2
2 2 2

이렇게 뽑아낼수있다!! 여기까지는 겨우생각해냄
그이후엔?? 모르겠다.... 구선생 출동

사람들 풀이과정을 보니
2차원배열로 하지않고
1차원배열로 풀었다.

Index => 0 1 2 3 4 5 6 7 8
Value => 0 1 2 1 1 2 2 2 2

여기에서 Value값은 max(index%n, index//n)

대단하다..어떻게 이런생각을... 몇일을 고민해도 이생각은 못했을것이다.. 답을본게 신의한수 ㅎ
(다음에 잘 하면 되지.. 노력은 배신하지 않는다..!)

💗성공한 풀이과정💗
def solution(n, left, right) :
    answer = []
    for index in range(left, right+1) :
        answer.append(max(index//n, index%n)+1)
   return answer