일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자료구조
- 우분투
- 인공지능
- docker
- 자바
- 파이썬
- DevOps
- 코테
- github
- 리눅스
- LV 0
- 깃
- 알고리즘
- programmers
- 데이터베이스
- 프로그래머스
- 쿠버네티스
- mysql
- Lv 2
- git
- 코딩테스트
- Kubernetes
- Ai
- 머신러닝
- Java
- Python
- ubuntu
- db
- 정처기
- Linux
Archives
- Today
- Total
Myo-Kyeong Tech Blog
[프로그래머스] Lv.2 뒤에 있는 큰 수 찾기 (Python / Java) 본문
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/154539?language=java
문제 설명
정수로 이루어진 배열 numbers
가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
정수 배열 numbers
가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
제한사항
- 4 ≤
numbers
의 길이 ≤ 1,000,000- 1 ≤
numbers[i]
≤ 1,000,000
- 1 ≤
입출력 예
문제 풀이
처음에는 이중 for문으로 문제를 풀었었는데 시간 초과가 떠서ㅠㅠ stack을 통해 문제를 풀었다.
- 정답을 저장 할 answer 배열 생성하고, 초기값으로 모든 원소 -1로 설정
- numbers 배열 순회
- stack이 비어 있지 않고, 스택의 맨 위에 저장된 인덱스의 값이 현재 값보다 작다면
- 현재 값이 스택의 맨 위에 저장된 인덱스의 값보다 크다는 것이므로 해당 값의 뒷 큰수로 설정
- stack의 맨 위에 저장한 인덱스를 꺼내 answer 배열의 해당 위치에 현재 값(num) 할당
- 현재 값의 인덱스를 스택에 추가
- stack이 비어 있지 않고, 스택의 맨 위에 저장된 인덱스의 값이 현재 값보다 작다면
- 결과 (answer 배열) 반환
[Python]
def solution(numbers):
answer = [-1] * len(numbers)
stack = []
for idx, num in enumerate(numbers):
while stack and numbers[stack[-1]] < num:
answer[stack.pop()] = num
stack.append(idx)
return answer
[Java]
import java.util.Stack;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < numbers.length; i++) {
answer[i] = -1;
}
for (int i = 0; i < numbers.length; i++) {
while (!stack.isEmpty() && numbers[stack.peek()] < numbers[i]) {
answer[stack.pop()] = numbers[i];
}
stack.push(i);
}
return answer;
}
}
728x90
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 [3차] n진수 게임 (Python) - 2018 KAKAO BLIND RECRUITMENT (0) | 2023.08.16 |
---|---|
[프로그래머스] Lv.2 [3차] 압축 (Python) - 2018 KAKAO BLIND RECRUITMENT (0) | 2023.08.15 |
[프로그래머스] Lv.3 최고의 집합 (Python / Java) (0) | 2023.08.15 |
[프로그래머스] Lv.0 정수를 나선형으로 배치하기 (Python) (0) | 2023.08.14 |
[프로그래머스] Lv.3 이중우선순위큐 (Python / Java) (0) | 2023.08.13 |