ALGORITHM

[JAVA] 백준 17299번- 오등큰수

연듀 2022. 10. 10. 17:24

https://www.acmicpc.net/problem/17299

 

17299번: 오등큰수

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());

        int[] arr = new int[n];
        int[] count = new int[1000001];
        int[] answer = new int[n];
        Stack<Integer> stack = new Stack<>();

        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i=0; i<n; i++){
            arr[i] = Integer.parseInt(st.nextToken());
            count[arr[i]]++;
        }

        for(int i=n-1; i>=0; i--){
            while(!stack.isEmpty() && count[stack.peek()] <= count[arr[i]]){
                stack.pop();
            }
            if(stack.isEmpty()) answer[i] = -1;
            else answer[i] = stack.peek();

            stack.push(arr[i]);
        }

        for(int x : answer){
            sb.append(x).append(" ");
        }
        System.out.println(sb);
    }
}

 

 

https://yeoncoding.tistory.com/547

 

[JAVA] 백준 17298번- 오큰수

https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acm..

yeoncoding.tistory.com

17298 오큰수와 비슷한 문제라 이문제는 바로 풀 수 있었다.

수열의 값 자체의 크기를 비교하는 것이 아니라 값의 빈도수를 비교해야하기 때문에 수열을 입력받을 때

빈도수 배열을 만들어 체크해주고, 수열의 값과 스택의 값을 비교할 때 빈도수를 비교한다.