[프로그래머스] 뒤에 있는 큰 수 찾기 (Stack)

Subeen·2024년 1월 23일
0

프로그래머스

목록 보기
1/1

뒤에 있는 큰 수 찾기

import java.util.*
class Solution {
    fun solution(numbers: IntArray): IntArray {
        val answer = mutableListOf<Int>() 
        val stack = Stack<Int>() // 스택을 생성하여 탐색한 값 저장 

        for(i in numbers.lastIndex downTo 0) { // 배열을 뒤에서부터 순회 
            var maxNum = -1
            while(stack.isNotEmpty()){ // 스택이 비어있지 않을 때 까지
                if(stack.peek() > numbers[i]) { // 스택의 맨 위의 값이 현재 원소보다 크다면 
                    maxNum = stack.peek() // 찾은 값으로 maxNum 갱신 
                    break // 더 이상 순회가 필요 없으므로 탈출 
                } else { 
                    stack.pop() // pop 해서 계속 순회 
                }
            }
            answer.add(maxNum) // 큰 값을 결과 리스트에 추가
            stack.push(numbers[i]) // 현재 값을 스택에 추가 
        }
        return answer.reversed().toIntArray() // 결과 리스트를 뒤집고 배열로 변환 
    }
}

Stack

Stack후입선출(나중에 입력된 것이 먼저 출력된다)의 구조를 갖는 자료구조이다.
코틀린에서 Stack을 사용하기 위해서는 직접 구현하거나 java.util.Stack를 import 하여 Java의 Stack을 사용할 수 있다.

Stack 함수

  • push : 원소를 삽입한다.
  • pop : 가장 위에 있는 원소를 삭제하고 해당 원소를 반환한다.
  • peek : 현재 가장 위에 있는 원소를 반환한다.
  • size : 현재 스택의 사이즈
  • search : 현재 찾을 원소가 존재한다면 원소가 나갈 순서를 반환하며, 존재하지 않다면 -1를 반환한다.
  • isNotEmpty : 스택이 비어있지 않다면 True를 반환한다.
  • isEmpty : 스택이 비어있다면 True를 반환한다.

참조
Kotlin 스택(Stack)

profile
개발 공부 기록 🌱

0개의 댓글

Powered by GraphCDN, the GraphQL CDN