[프로그래머스] Lv.2 뒤에 있는 큰 수 찾기 (Java)

2023. 7. 1. 14:47·Algorithms(CT)/Programmers


💡 아이디어

"가장 가까이 있는 수"  이런 키워드가 나오는 문제들은 모두 Stack을 활용한 문제풀이를 고려해야 합니다.

가장 가까운, 연속된, 붙어있는, 괄호 2~단어를 찾아야 하는 문제가 모두 그 예시로 볼 수 있습니다.

 

 

📖 풀이과정

 

1. Stack을 int[]형으로 선언해 i번째 수와 인덱스 i를 집어넣을 수 있도록 만듭니다.

Stack<int[]> stack = new Stack<>();

 

2. 스택이 비어있는 상태라면 i번째 수와 i를 stack에 넣고, 다음 반복문을 실행합니다.

if(stack.isEmpty()){
	stack.push(new int[]{numbers[i],i});
}

3. 스택이 비어있지 않고 stack에 가장 위에 있는 수가 i번째 수보다 작을 때, stack에서 pop한 수의 인덱스에 현재 i번째 수를 저장합니다.

while(!stack.isEmpty() && (stack.peek())[0]<numbers[i]){
	answer[(stack.pop())[1]]=numbers[i];
}

 

4. stack에서 i번째 수보다 작은 수를 모두 꺼낸 뒤, stack에 i번째 수와 i를 넣고 다음 반복문을 실행합니다.

stack.push(new int[]{numbers[i],i});

 

5. numbers의 모든 숫자들을 확인하고 stack에 남아있는 수들은 모두 자신보다 뒤의 큰 숫자가 없는 것으로 모두 -1를 넣어줍니다.


전체 코드

import java.util.*;
class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = new int[numbers.length];
        
        Stack<int[]> stack = new Stack<>();
        for(int i=0;i<numbers.length;i++){
            if(stack.isEmpty()){//스택이 비어있으면 검사 필요 없이 넣어줌.
                stack.push(new int[]{numbers[i],i});continue;
            }
            //i번째 수보다 작은 수들 모두 빼내서 해당 index를 i번째 수로 채운다.
            while(!stack.isEmpty() && (stack.peek())[0]<numbers[i]){
                answer[(stack.pop())[1]]=numbers[i];
            }
            stack.push(new int[]{numbers[i],i});
        }
        for(int[] i:stack)//자신보다 뒤에 큰 수가 없는 수들은 모두 -1 넣어줌.
            answer[i[1]]=-1;
        
        return answer;
    }
}

'Algorithms(CT) > Programmers' 카테고리의 다른 글

[프로그래머스] Lv.2 숫자 변환하기  (0) 2023.07.05
[프로그래머스] Lv.2 2개 이하로 다른 비트 (Java)  (1) 2023.07.04
[프로그래머스]Lv2. 파일명 정렬 (Java)  (0) 2023.06.29
[프로그래머스] Lv.2 스킬트리  (0) 2023.06.29
[프로그래머스] Lv.2 방문 길이 (Java)  (0) 2023.06.29
'Algorithms(CT)/Programmers' 카테고리의 다른 글
  • [프로그래머스] Lv.2 숫자 변환하기
  • [프로그래머스] Lv.2 2개 이하로 다른 비트 (Java)
  • [프로그래머스]Lv2. 파일명 정렬 (Java)
  • [프로그래머스] Lv.2 스킬트리
gwee_99
gwee_99
bE bETTER!
  • gwee_99
    얼렁이와 뚱땅이
    gwee_99
  • 전체
    오늘
    어제
    • ====Category====
      • Algorithms(CT)
        • Programmers
        • Baekjoon
        • Goorm
      • Web
        • Error 해결
      • BackEnd
        • Spring
        • JPA
      • FrontEnd
        • HTML.CSS
        • JavaScript
      • Language
        • Java
      • Cloud
      • CSTS
      • Books
        • IT 5분 잡학사전
      • 일상
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    LV.3
    DFS
    호텔 대실
    인프런
    백준
    노마드코더
    lv2
    IT 5분 잡학사전
    구름톤 챌린지
    구름
    java
    lv.4
    개발자북클럽
    제대로 파는 자바스크립트
    프로그래머스
    HTML
    따라하며 배우는 html css
    BOJ
    존안님
    코딩테스트
    Lv.1
    Til
    IT 잡학사전
    DP
    LV.2
    스택
    Greedy
    자바
    그리디
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gwee_99
[프로그래머스] Lv.2 뒤에 있는 큰 수 찾기 (Java)
상단으로

티스토리툴바