
앞선 오큰수 문제와 거의 같다.
다만 오큰수에서는 값 자체를 비교했고, 오등큰수는 등장횟수로 비교한다.
값을 Map자료형으로 이용해 각 숫자를 key로, 등장횟수를 value로 받아 활용하였다.
나머진 오큰수와 같은 방식으로 풀었다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] str = br.readLine().split(" ");
int[] a = new int[n];
Map<Integer, Integer> map = new HashMap<>(); // map 자료형으로 각 숫자값의 등장횟수를 count.
Stack<Integer> stack = new Stack<>(); // 배열의 index를 담을 스택.
for (int i=0; i<n; i++) {
a[i] = Integer.parseInt(str[i]);
map.put(a[i], map.getOrDefault(a[i], 0)+1); // 맵에 각 숫자별 카운트를 넣어준다.
}
StringBuilder sb = new StringBuilder();
for (int i=0; i<n; i++) {
while (!stack.isEmpty() && map.get(a[i])>map.get(a[stack.peek()])) {
a[stack.pop()] = a[i];
}
stack.push(i); // 스택에 현재 index 값을 넣어준다.
}
while (!stack.isEmpty()) {
a[stack.pop()] = -1; // 스택에 남은 값들은 오큰수가 없어 -1을 대입
}
for (int i : a) {
sb.append(i + " "); // 값을 StringBuilder에 담아준다.
}
System.out.println(sb); // 정답을 출력.
}
}'백준 문제풀이' 카테고리의 다른 글
| 1918. 후위 표기식 (자바, Java) (0) | 2022.11.20 |
|---|---|
| 1935. 후위 표기식2 (자바, Java) (0) | 2022.11.20 |
| 17298. 오큰수 (자바, Java) (0) | 2022.11.20 |
| 10799. 쇠막대기 (자바, Java) (0) | 2022.11.20 |
| 17413. 단어 뒤집기 2 (자바, Java) (0) | 2022.11.20 |