알고리즘/프로그래머스문제풀이

[Python/프로그래머스]n^2배열자르기_[구현]

개발자 덕구🐾 2022. 10. 2. 20:42
728x90

 

 

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

 

아 또 풀었는데 시간초과😈

내가 효율적으로 코드를 짜는 법을 모르나보다. 

 

 

시간초과 코드 :

def solution(n, left, right):
    answer = []
    mp = [[0]*n for _ in range(n)]
    for i in range(n) :
        mp[0][i] = i 
        for j in range(1,i+1) :
            mp[j][i] = i
        for j in range(i,-1,-1) :
            mp[i][j] = i
    for i in range(n) :
        answer.extend(mp[i])    
    
    answer = list(map(lambda x : x+1, answer))
    answer = answer[left:right+1]
            
    return answer

 

 

정답코드를 보니까 그럴만 하기도 하다.....덴댱....

나는 그냥 문제에 나와있는 애니메이션을 고대로 코드로 옮겼다. 

근데 정답 코드는 머리를 써서 하네..

 

 

 

 

한번 그림을 그려보고 가만히 생각하면 

해당 순번 값을 n으로 나눈 몫은 행번호를 가리키고 

n으로 나눈 나머지는 열의 번호를 가리킨다.

 

 

 

해당 이차원 배열을 채우는 방법은 행과 열의 번호 중 큰 숫자로 채우는 것이다. 

즉, n으로 나눠서 나온 몫과 나머지 중 큰 값 + 1 로 채우면 된다. 

 

 

근데 이걸 혼자 그냥 내가 어떻게 생각하냐고 😣

 

 

정답 코드 : 

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

 

 

 

 

반응형