반응형
프로그래머스 문제
뒤에 있는 큰 수 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/154539
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1차 풀이 (실패)
이중 loop로 만들면 너무 계산량이 많아서 시간 초과가 되어버린다
이중 loop로는 효율성 문제 때문에 통과 안되는거 같다.
"""
자신보다 뒤에서 크면서 가장 가까운 수
"""
def solution(numbers):
answer = []
for i in range(len(numbers)):
#print(numbers[i])
for j in range(i+1, len(numbers)):
#print(j)
if numbers[j] > numbers[i]:
answer.append(numbers[j])
#print(numbers[j])
break
# 아무것도 없을 경우
elif j == len(numbers)-1:
answer.append(-1)
#print(-1)
# 맨 마지막은 그냥 -1
answer.append(-1)
return answer
뭔가 stack 형식으로 하면 풀린다고 한다는데 잘모르겠네
2차 풀이
솔직히 모르겠어서 답을 보고 말았다......
근데 답을 봐도 어렵다
- answer에 일단 [-1, -1, -1, -1, ...]를 넣기
- while문에서 numbers[stack[-1]]값과 numbers[i] 값과 비교,
- pop()을 해주어 뒷 큰 수가 없는 인덱스가 남도록 한다
"""
자신보다 뒤에서 크면서 가장 가까운 수
"""
def solution(numbers):
answer = [-1 for i in range(len(numbers))]
stack = []
for i in range(len(numbers)):
# numbers[stack[-1]]는 앞의 번호, numbers[i] 뒤에 번호
while stack and numbers[stack[-1]] < numbers[i]:
answer[stack.pop()] = numbers[i]
stack.append(i)
print("answer =", answer)
return answer
반응형
'코딩 테스트 > Programmers' 카테고리의 다른 글
[Python] [Level 1] 대충 만든 자판 (enumerate 활용하기) (0) | 2023.03.15 |
---|---|
[Python] [Level 2] 시소 짝꿍 (Counter 함수 활용하기) (0) | 2023.03.14 |
[Python] [Level 2] 호텔 대실 (lambda 함수 활용하기, 모두 분(分)으로 바꾸기) (0) | 2023.03.11 |
[Python] [Level 2] 타겟 넘버 (깊이/너비 우선 탐색[DFS/BFS]) ... BFS로 풀기 (0) | 2023.03.11 |
[Python] [Level 2] 혼자서 하는 틱택토 (너무 싫은 문제) (0) | 2023.03.10 |