프로그래머스
[프로그래머스][kotlin] 뒤에 있는 큰 수 찾기
끝까지 처음처럼
2023. 1. 30. 15:02
728x90
import java.util.*
class Solution {
fun solution(numbers: IntArray): IntArray {
var result = ArrayDeque<Int>()
var stack = ArrayDeque<Int>()
for(i in numbers.size-1 downTo 0){
while(!stack.isEmpty()){
if(stack.peekLast() > numbers[i]){
result.add(stack.peekLast())
stack.add(numbers[i])
break
} else {
stack.removeLast()
}
}
if(stack.isEmpty()){
result.add(-1)
stack.add(numbers[i])
}
}
var answer = IntArray(numbers.size)
for(i in 0 .. answer.size-1){
answer[i] = result.pollLast()
}
return answer
}
}
상기문제의 경우 타이밍이 매우 좋았다고 말씀 드릴 수 있습니다.
문제풀기 전날 스터디에서 해당 문제와 거의 동일한 백준의 오큰수 문제에 대하여 설명을 들었기에 간단히 풀 수 있었습니다.(매우 날먹(?)한 문제)
해당 문제의 경우 아이디어만 있다면 쉽게 풀 수 있는 문제였습니다.
포인트로는 numbers 를 거꾸로 조회하면서 Stack(상기 코드에서는 Deque를 Stack처럼 사용) 내에 "뒷 큰수" 를
저장 및 pop 하여 answer 에 저장하는 것입니다.
알고리즘 문제를 풀면서 느끼는거는 아이디어의 차이가 해당 문제의 난이도를 쉽게 푸느냐 어렵게 푸느냐도 결정하는게 크구나라고 생각하였습니다.
상기 코드의 실행결과 입니다.
테스트 1 〉 | 통과 (0.09ms, 62.4MB) |
테스트 2 〉 | 통과 (0.10ms, 58.5MB) |
테스트 3 〉 | 통과 (0.07ms, 60.6MB) |
테스트 4 〉 | 통과 (0.62ms, 59.1MB) |
테스트 5 〉 | 통과 (1.68ms, 61.5MB) |
테스트 6 〉 | 통과 (6.88ms, 62.7MB) |
테스트 7 〉 | 통과 (8.35ms, 62.7MB) |
테스트 8 〉 | 통과 (24.20ms, 77.5MB) |
테스트 9 〉 | 통과 (20.73ms, 74.4MB) |
테스트 10 〉 | 통과 (34.28ms, 90MB) |
테스트 11 〉 | 통과 (36.93ms, 88.2MB) |
테스트 12 〉 | 통과 (48.70ms, 106MB) |
테스트 13 〉 | 통과 (51.98ms, 103MB) |
테스트 14 〉 | 통과 (103.56ms, 135MB) |
테스트 15 〉 | 통과 (131.49ms, 185MB) |
테스트 16 〉 | 통과 (104.31ms, 185MB) |
테스트 17 〉 | 통과 (92.35ms, 185MB) |
테스트 18 〉 | 통과 (115.80ms, 187MB) |
테스트 19 〉 | 통과 (107.94ms, 186MB) |
테스트 20 〉 | 통과 (64.53ms, 180MB) |
테스트 21 〉 | 통과 (82.47ms, 169MB) |
테스트 22 〉 | 통과 (74.03ms, 150MB) |
테스트 23 〉 | 통과 (82.45ms, 170MB) |