https://www.acmicpc.net/problem/17299
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
17298 오큰수와 비슷한 문제라 이문제는 바로 풀 수 있었다.
수열의 값 자체의 크기를 비교하는 것이 아니라 값의 빈도수를 비교해야하기 때문에 수열을 입력받을 때
빈도수 배열을 만들어 체크해주고, 수열의 값과 스택의 값을 비교할 때 빈도수를 비교한다.
'ALGORITHM' 카테고리의 다른 글
[JAVA] 백준 17087번- 숨바꼭질 6 (0) | 2022.10.21 |
---|---|
[JAVA] 백준 9613번- GCD 합 (0) | 2022.10.21 |
[JAVA] 백준 6588번- 골든바흐의 추측 (0) | 2022.10.09 |
[JAVA] 백준 1676번 - 팩토리얼 0의 개수 (1) | 2022.10.09 |
[JAVA] 백준 2609번- 최대공약수와 최소공배수(유클리드 호제법) (0) | 2022.10.09 |