코테 준비/프로그래머스
[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