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

문제간단설명)
자신보다 오른쪽에 있고, 더 많이 등장한 애들중에 가장 왼쪽에 있는 숫자 출력
풀이)
오큰수 문제에서 이용했던 방식 그대로 썼다.
>참고 이전 포스팅(백준 17298오큰수 자바)
각 숫자들이 몇개가 있는지 알수있도록 함수를 만들었다.
이 함수에서는 각 숫자들의 출연개수를 정수형 배열로 반환한다.
>숫자 갯수 세기 하는 방법은 더보기 참고
갯수를 셀 배열 하나를 만든다.
정수형 배열 cnt[] 라고 하자.
이 배열의 크기는 나올 수 있는 가장 큰 숫자 + 1이다.
만약 나올 수 있는 숫자가 1~1,000,000이라면
크기를 1,000,001으로 설정한다.
배열은 인덱스 0부터 시작하므로
cnt[0] 부터 cnt[1,000,000]까지 만들어 질 것이다. (1,000,001개이다)
준비 끝
숫자를 하나 받아들이면
그 숫자를 인덱스로 가지고 있는 값을 +1 해준다.
예를들어 1 1 2 3 3 1 이면
첫번째 값 1이므로 cnt[1]++
두번째 값 1이므로 cnt[1]++
세번째 값 2 이므로 cnt[2]++
네번째 값 3 이므로 cnt[3]++
다섯번째 값 3 이므로 cnt[3]++
여섯번째 값 1이므로 cnt[1]++
cnt[]배열에 숫자들이 몇개가 나왔는지 저장되는 것이다.

1이 몇개 나왔는지 알고싶으면 cnt[1]값
n이 몇개 나왔는지 알고싶다면 cnt[N]값 보면 된다.
반환한 배열을 cnt[]에 저장했다.
오큰수 문제에서는 그 값들의 크기를 비교했다면,
오등큰수 문제에서는 그 숫자가 얼마나 많이 나왔는지를 비교한다.
그렇기 때문에 전에 짰던 코드에서 cnt[]만 추가해줬다.
|
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
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<Integer> stk = new Stack<>();
int N = sc.nextInt();
int seq[] = new int[N];
int cnt[] = new int[1000001];
for(int i = 0; i < N; i++){
seq[i] = sc.nextInt();
}
cnt = countNum(seq);
for(int i = 0; i < seq.length; i++){
while(!stk.isEmpty() && cnt[seq[i]] > cnt[seq[stk.peek()]]){
seq[stk.pop()] = seq[i];
}
stk.push(i);
}
while(!stk.isEmpty()){
seq[stk.pop()] = -1;
}
for(int i = 0; i < seq.length; i++){
bw.write(seq[i] + " ");
}
bw.flush();
bw.close();
}
public static int[] countNum(int[] tmp){
int[] cnt = new int[1000001];
for(int i = 0; i < tmp.length; i++){
cnt[tmp[i]]++;
}
return cnt;
}
}
|
cs |
'알고리즘 > 백준' 카테고리의 다른 글
| 백준 1918 후위표기식 자바[java] (0) | 2023.01.06 |
|---|---|
| 백준 1935 후위표기식2 자바[java] (0) | 2023.01.05 |
| 백준 17298 오큰수 자바[java] (0) | 2023.01.04 |
| 백준 10799 쇠막대기 자바[java] (0) | 2023.01.03 |
| 백준 17413 단어뒤집기 2 자바[java] (0) | 2023.01.03 |