๋ฌธ์
ํฌ๊ธฐ๊ฐ N์ธ ์์ด A = A1, A2, ..., AN์ด ์๋ค. ์์ด์ ๊ฐ ์์ Ai์ ๋ํด์ ์คํฐ์ NGE(i)๋ฅผ ๊ตฌํ๋ ค๊ณ ํ๋ค. Ai์ ์คํฐ์๋ ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด์ Ai๋ณด๋ค ํฐ ์ ์ค์์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋ฌํ ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์คํฐ์๋ -1์ด๋ค.
์๋ฅผ ๋ค์ด, A = [3, 5, 2, 7]์ธ ๊ฒฝ์ฐ NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1์ด๋ค. A = [9, 5, 4, 8]์ธ ๊ฒฝ์ฐ์๋ NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ํฌ๊ธฐ N (1 โค N โค 1,000,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์ ์์ด A์ ์์ A1, A2, ..., AN (1 โค Ai โค 1,000,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ด N๊ฐ์ ์ NGE(1), NGE(2), ..., NGE(N)์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
1 ์ด | 512 MB | 72922 | 25497 | 18035 | 33.558% |
https://www.acmicpc.net/problem/17298 |
ํ์ด
์ฝ๋
์ฒซ๋ฒ์งธ ์๋
public class ์คํฐ์ {
public static void main(String[] args) throws IOException {
//Ai ๋ณด๋ค ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด์ Ai๋ณด๋ค ํฐ์ ์ค์์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋์. ์๊ฐ์์ผ๋ฉด -1 ์ด๋ค.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
String[] arr = br.readLine().split(" ");
int now = 0;
int last = 0;
for(int i=0; i<N; i++){
now = Integer.parseInt(arr[i]);
for(int j=i+1; j<N; j++){
if(now < Integer.parseInt(arr[j])) stack.push(Integer.parseInt(arr[j]));
}
if(stack.isEmpty()){
sb.append(-1).append(" ");
}else {
last = stack.firstElement();
stack.clear();
sb.append(last).append(" ");
}
}
System.out.println(sb);
br.close();
}
}
์ด์ค for๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
![[Pasted image 20231012143842.png]]
๋๋ฒ์งธ ์๋ - ์ฑ๊ณต
package ๊ธฐ์ด1.Day03.์ ํด์;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class ์คํฐ์ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack = new Stack<>();
int N = Integer.parseInt(br.readLine());
int[] seq = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i=0; i<N; i++){
seq[i] = Integer.parseInt(st.nextToken());
}
for(int i=0; i<N; i++){
//์คํ์ด ๋น์ด์์ง ์์ผ๋ฉด์, ํ์ฌ์ ์์(seq[i])๊ฐ ์คํ์ ๋งจ์ ์์๋ณด๋ค ํฐ๊ฒฝ์ฐ,
//ํด๋น์กฐ๊ฑด์ ๋ง์กฑํ ๋๊น์ง stack์ ์์๋ฅผ pop ํ๋ฉด์ ํด๋น์ธ๋ฑ์ค์ ๊ฐ์ ํ์ฌ์ ์์๋ก ๋ฐ๊ฟ์ค๋ค.
while (!stack.isEmpty() && seq[stack.peek()] <seq[i]){
seq[stack.pop()] = seq[i];
}
stack.push(i); //์ธ๋ฑ์ค๋ฅผ ๋ฃ์ด์ค๋ค.
}
/*
์คํ์ ๋ชจ๋ ์์๋ฅผ pop ํ๋ฉด์ ํด๋น ์ธ๋ฑ์ค์ value๋ฅผ -1๋ก ์ด๊ธฐํํ๋ค.
*/ while (!stack.isEmpty()){
seq[stack.pop()] = -1;
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
sb.append(seq[i]).append(' ');
}
System.out.println(sb);
}
}