728x90
반응형
링크: https://school.programmers.co.kr/learn/courses/30/lessons/87390
아이디어
- 2중 for문을 돌리는데 i, j를 비교하여 큰 수를 1차원 배열에 append 하는 방식으로 하면 1,2,3 과정을 한 번에 할 수 있을 듯
- 이후 슬라이스를 하여 result를 반환한다.
코드(시간초과)
def solution(n, left, right):
tmp = []
# 수 채움과 동시에 1차원 배열로 표현
for i in range(n):
for j in range(n):
if j >= i:
tmp.append(j+1)
else:
tmp.append(i+1)
# 잘라서 1차원 배열 생성
answer = tmp[left:right+1]
return answer
원인 유추 1
- 1차원 배열을 모두 선언할 필요가 없는 것 같다.
- right 다음 요소들은 애초에 append 하지 말자.
코드(시간초과)
def solution(n, left, right):
tmp = []
cnt = 0
# 수 채움과 동시에 1차원 배열로 표현
for i in range(n):
for j in range(n):
if cnt > right:
break
elif j >= i:
tmp.append(j+1)
else:
tmp.append(i+1)
cnt+=1
# 잘라서 1차원 배열 생성
answer = tmp[left:right+1]
return answer
원인 유추 2
- 첫 시도보다 시간초과 항목이 많이 줄어들었다.
- 2중 for문을 사용하지 않아도 될 것 같은데?
- range(left, right)만큼 반복하는데 인자를 n으로 나누면 위에서 사용한 i, j의 값을 구할 수 있을
코드
def solution(n, left, right):
tmp = []
cnt = 0
# 수 채움과 동시에 1차원 배열로 표현
for i in range(left, right+1):
# 1부터 시작이니 +1을 해줌
a = i//n+1
b = i%n+1
if a >= b:
tmp.append(a)
else:
tmp.append(b)
return tmp
마무리
- 시도할 때마다 시간초과가 줄어드는 게 눈에 보여 재밌었음
- 코드를 짤 때마다 줄일 수 있는 부분이 나중에 보인다 처음 설계 할 때부터 최소한의 최대의 효율을 낼 수 있는 코드를 짜도록 노력하자
728x90
반응형
'코테준비 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 이중우선순위큐 (0) | 2023.08.23 |
---|---|
[프로그래머스] 정수 삼각형 - Python (0) | 2023.08.23 |
[프로그래머스] 숫자의 표현 - Python (0) | 2023.08.09 |
[프로그래머스] 단어 변환 - Python (0) | 2023.08.05 |