99클럽 코테 스터디 1일차 TIL + 배열/스택

2024. 7. 22. 16:35·Algorithm/99클럽 코테 스터디
728x90
반응형

💡문제

[level 2] 뒤에 있는 큰 수 찾기 - 154539

문제 링크

성능 요약

메모리: 206 MB, 시간: 259.36 ms

 


 

🤔접근법

주어진 정수 배열을 순회하면서 본인보다 오른쪽에 있는 수들 중에서 본인보다 크지만 가장 가까이 있는 수 찾기

범위 체크 및 시간복잡도 예상

  • 1 ≤ N ≤ 1,000,000
  • O($NlogN$) 보다 더 작아야 한다.
  •  

풀이법

❌ 접근 방법. 완탐

  1. 주어진 정수 배열을 인덱스 0 ~ N 까지 반복
  2. 가르키는 정수로부터 오른쪽에 존재하는 모든 정수를 탐색
  3. 만약 본인보다 큰 정수가 나오면 answer에 저장하고 정지

➡️ 해당 풀이법의 시간 복잡도 : $O(N^2)$ → 시간 초과

 

⭕ 접근 방법. stack을 사용하자 !

스택에는 정수배열의 인덱스와 값을 넣는다.

스택은 top 보다 값이 작을때만 쌓을 수 있다.

  1. 주어진 정수 배열을 인덱스 0 ~ N 까지 반복
  2. 스택의 top의 값이 배열의 값보다 크다면 answer 배열에 top 위치에 가르키는 값을 넣는다. → top보다 오른쪽에 있으면서 top보다 크고 가장 가까이 있는 수 찾음!
  3. 스택의 top의 값이 배열의 값보다 작다면 스택에 쌓는다. → 스택에 쌓여있는 값들은 찾고자 하는 값 즉, 본인보다 오른쪽에 있고, 본인보다 크고, 가장 가까이 있는 수를 찾지 못한 수들이다.
  4. 배열에 가르키고 있는 값을 스택에 쌓고 다음으로 넘어간다.

➡️ 해당 풀이법의 시간 복잡도 : $O(N)$

 


 

🤯FAIL

답을 봐서 문제를 푼 경우

  • 스택 자료구조를 사용해야 한다는 아이디어를 떠올리지 못했다.
  • 다양한 자료구조를 사용할 수 있도록 노력해보자.

 

👩‍💻 코드

import java.io.IOException;
import java.util.Arrays;
import java.util.Stack;

class Number {
    int idx;
    int num;
    public Number(int idx, int num){
        this.idx = idx;
        this.num = num;
    }
}
class Solution {
    public int[] solution(int[] numbers) {
            int[] answer =  new int[numbers.length];
            Arrays.fill(answer, -1);
            Stack<Number> st = new Stack<>();

            for(int i = 0; i < numbers.length; i++){
                while (true){
                    if(st.size() == 0 || st.peek().num >= numbers[i]){
                        break;
                    }else{
                        answer[st.pop().idx] = numbers[i];
                    }
                }
                st.push(new Number(i,numbers[i]));
            }
        
        return answer;
    }
}

반응형

'Algorithm > 99클럽 코테 스터디' 카테고리의 다른 글

99클럽 코테 스터디 6일차 TIL + Arrays.sort/[프로그래머스] 테이블 해시 함수  (0) 2024.07.27
99클럽 코테 스터디 5일차 TIL + HashMap/[프로그래머스] 베스트앨범  (0) 2024.07.27
99클럽 코테 스터디 4일차 TIL + 문자열/[프로그래머스] 문자열 압축  (0) 2024.07.25
99클럽 코테 스터디 3일차 TIL + [프로그래머스] 숫자 문자열과 영단어  (0) 2024.07.24
99클럽 코테 스터디 2일차 TIL + 유클리드호제법/GCD  (1) 2024.07.23
'Algorithm/99클럽 코테 스터디' 카테고리의 다른 글
  • 99클럽 코테 스터디 5일차 TIL + HashMap/[프로그래머스] 베스트앨범
  • 99클럽 코테 스터디 4일차 TIL + 문자열/[프로그래머스] 문자열 압축
  • 99클럽 코테 스터디 3일차 TIL + [프로그래머스] 숫자 문자열과 영단어
  • 99클럽 코테 스터디 2일차 TIL + 유클리드호제법/GCD
제가안난데여♪(´ε`*)
제가안난데여♪(´ε`*)
기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 제가안난데여♪(´ε`*)
    안나의 전두엽 어딘가 🧠
    제가안난데여♪(´ε`*)
    기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • 간단하게 한스푼🥄 (1)
      • Programming (56)
        • Spring (16)
        • Vue.js (6)
        • Deep Learning (3)
        • DataBase (5)
        • React (26)
      • DevOps (21)
        • Docker (12)
        • Linux (4)
      • Algorithm (46)
        • 알고리즘 정리 (5)
        • 자료구조 (0)
        • PS - 백준 (28)
        • 99클럽 코테 스터디 (13)
      • Project (0)
        • CampFire (0)
      • 안나의 취뽀일기 (˵ •̀ ᴗ - ˵ ) ✧ (4)
        • SSAFY_9기 (2)
        • SW 부트캠프 (2)
  • 잔디 달력

    «   2025/07   »
    일 월 화 수 목 금 토
    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
  • 인기 글

  • 태그

    java
    greedy
    React
    stack
    개발자 취업
    백준 구현문제
    백준
    springboot
    코딩테스트 준비
    도커컨테이너
    Vue.js
    front-end
    리액트 상태
    백준 java
    김영한
    java stack
    Vue
    Spring
    자바 스택
    til
    linux
    알고리즘
    자바
    topology sort
    항해99
    도커
    99클럽
    docker
    Vue.js 입문하기
    java 백준
  • 07-05 17:33
    반응형
  • hELLO· Designed By정상우.v4.10.3
제가안난데여♪(´ε`*)
99클럽 코테 스터디 1일차 TIL + 배열/스택
상단으로

티스토리툴바