728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제
정수로 이루어진 배열 numbers가 있습니다.
배열의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰 수라고 합니다.
[입력]
- numbers: 정수 배열
[출력]
모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return
🌹 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
2. 풀이
먼저 자신보다 뒤에 있는 숫자에서 가장 큰 숫자를 찾는 문제이기 때문에 뒤에서부터 결과를 찾아야 합니다.
저는 뒷 큰수를 먼저 구하는 것이 아닌, 뒷 큰수의 index를 먼저 구해두고
마지막에 index에 해당하는 수를 numbers에서 대체하는 방식으로 구현하였습니다.
이렇게 하게 되면, 자신의 뒤에 있는 모든 숫자를 하나씩 탐색해가며 뒷 큰수를 찾을 필요없이,
index를 타고 가면서 빠르게 탐색할 수 있기 때문입니다.
👇🏻 요렇게!
3. 코드
class Solution {
fun solution(numbers: IntArray): IntArray {
val n = numbers.size
val answer = IntArray(n) { 0 }
answer[n - 1] = -1
for (i in n - 2 downTo 0) {
when {
numbers[i + 1] == numbers[i] -> answer[i] = answer[i + 1]
numbers[i + 1] > numbers[i] -> answer[i] = i + 1
else -> {
var index = i + 1
while (index >= 0 && numbers[index] <= numbers[i])
index = answer[index]
answer[i] = index
}
}
}
return answer.map { if (it == -1) -1 else numbers[it] }.toIntArray()
}
}
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스>Lv2] 호텔 대실 - kotlin, python (0) | 2023.02.08 |
---|---|
[프로그래머스>Lv1] 둘만의 암호 - kotlin & python (0) | 2023.02.03 |
[프로그래머스>Lv2] 택배 배달과 수거하기 - Python (0) | 2023.02.03 |
[프로그래머스>Lv.2] 무인도 여행 (0) | 2023.01.31 |
[Lv.2] 이모티콘 할인행사 (0) | 2023.01.27 |