코테 준비/프로그래머스

[level 2] n^2 배열 자르기

쿠쿠*_* 2023. 5. 13. 13:20

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

 

프로그래머스

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

programmers.co.kr

아래와 같이 했을 경우에,, 몇몇개는 통과했었는데 나머지 테스트들에서는 '실패 (시간 초과)'가 떠버렸다..

#틀린 풀이
def solution(n, left, right):
    answer = [[0 for _ in range(n)] for _ in range(n) ]
    arr=[]
    
    for i in range(n):
        for j in range(n):
            if i==j:
                answer[i][j]=i+1
    for i in range(n):
        for j in range(n):
            temp=max(i,j)
            answer[i][j]=answer[temp][temp]
    #print(answer)
    
    for i in range(n):
        for j in range(n):
            arr.append(answer[i][j])
    return arr[left: right+1]

 

더 효율적인 코드를 짜야하는 것일까. 흠 고민해본다. 구글링해서 보니까 내 예상과는 전혀 다른 풀이였다..!

몫과 나머지 중에서 큰것+1의 값을 넣는 방식으로 구현하는 것이 정답이었는데 어떻게 이런 아이디어를 떠올릴 수가 있는건지🙄더 공부해야겠다.

 


if) index = 8, n = 4

(i // n, i % n) → (2, 0)  3

 

if) index = 9, n = 4

(i // n, i % n) → (2, 1)  3

 

if) index = 10, n = 4

(i // n, i % n) → (2, 2)  3

 

if) index = 11, n = 4

(i // n, i % n) → (2, 3)  4

 

if) index = 7, n = 4

(i // n, i % n) → (1, 3)  4

 

if) index = 14, n = 4

(i // n, i % n) → (3, 2)  4


#옳은 풀이 1
def solution(n, left, right):
    return [max(i//n, i%n)+1 for i in range(left, right+1)]
#옳은 풀이 2
def solution(n, left, right):
    answer = []
    for i in range(left,right+1):
        a = i//n # 몫
        b = i%n #나머지 
        if a<b: a,b =b,a 큰거 구하기 
        answer.append(a+1)
    
    return answer

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

[level 2] k진수에서 소수 개수 구하기  (1) 2023.05.14
[level 2] 피로도  (0) 2023.05.13
[level 1] 대충 만든 자판  (0) 2023.05.10
[level 1] 덧칠하기  (0) 2023.05.10
[level 1] 카드 뭉치  (0) 2023.05.10