[백준][17299번] 오등큰수
Updated:
나의 풀이
package backjoon;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int size = Integer.parseInt(br.readLine());
int[] a = new int[size]; // input
int[] ans = new int[size]; // 답
Stack<Integer> st = new Stack<>();
StringTokenizer str = new StringTokenizer(br.readLine());
Map<Integer, Integer> m = new HashMap<>(); // 빈도수
for(int i=0; i<size; i++)
a[i] = Integer.parseInt(str.nextToken());
for(int i=0; i<size; i++)
m.put(a[i], m.getOrDefault(a[i], 0)+1);
st.push(0);
for(int i=1; i<size; i++){
//빈도수가 더 높으면
while(!st.empty() && m.get(a[st.peek()]) < m.get(a[i])) {
ans[st.pop()] = a[i];
}
st.push(i);
}
//스택에 남은 원소 위치에 -1저장
while(!st.empty())
ans[st.pop()] = -1;
for(int b : ans)
bw.write(b+" ");
bw.flush();
}
}
느낀점
빈칸 기준으로 String을 쪼개는 방식으로 두가지 방법을 사용해봤다.
1) String의 split() 메서드를 활용 (1740ms) 2) StringTokenizer 사용 (1468ms)
StringTokenizer사용 하는편이 약 300ms가량 빨라지는 것을 깨달았다!
Leave a comment