[๋ฐฑ์ค] ๐ฅ 1966 ํ๋ฆฐํฐ ํ
๐ ๋์ด๋
๐ฅ Silver 3
๐ ๋ฌธ์
https://www.acmicpc.net/problem/1966
๐ ํ์ด
์ด ๋ฌธ์ ๋ฅผ ์ฝ๋๋ฐ, ์ฒ์์๋ ๋์ฒด ์
๋ ฅ์ด ๋ฌด์จ ์๋ฆฌ์ธ๊ฐโฆ ํ์ฐธ ๋ค์ ์ฝ์ด๋ณด์๋ค.
์ฐฌ์ฐฌํ ์ฝ์ด๋ณด๋, ๋งจ ์ฒ์ ์ฃผ๋ ์ซ์๋ ํ
์คํฐ ์ผ์ด์ค์ ์ซ์์ด๊ณ , ๊ทธ ์ซ์๋งํผ 2์ค์ง๋ฆฌ์ ํ
์คํฐ ์ผ์ด์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ฃผ๋ ๋ฌธ์ ์๋ค.
์ฒ์์๋ Queue
๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋นผ์ ๋ค์ ๋ฃ์๋๋ง๋ค, target์ ์ฃผ์๋ฅผ -1์ฉ ํ๋ค๊ฐ target ์ฃผ์๊ฐ์ด -1๋ณด๋ค ์์์ง๋ฉด ์ต๋ ์ซ์๊ฐ ๋๋ ์์ผ๋ก ๋๊ฒ ๋ณต์กํ๊ฒ ๊ตฌํ์ ํ๋ค.
๊ทธ๋ฌ๋ค๊ฐ ๋๋ฌด ๋ณต์กํด์ ธ์ ๊ทธ๋ฅ 000100
๊ฐ์ด ์ฃผ์๊ฐ์ ์ ์ฅํ๊ณ ์๋ Queue
๋ฅผ ์๋ก ๋ง๋ค์ด ์ฃผ์๋ค.
๊ทธ๋์, Queue
์ ๊ฐ์ ๋ฃ์ด์ค๋ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ ์ฅํด ๋์๋ค๊ฐ max-0
๊ฐ๊น์ง์ for
๋ฌธ์ ๋ง๋ค๊ณ , Queue
๊ฐ์ด i
๊ฐ๊ณผ ๊ฐ์๋ ๊ทธ ๊ฐ์ ๋นผ๋ฒ๋ฆฌ๊ณ , result
์ ๊ฐ์ +1
ํด์ฃผ์๋ค.
์ดํ Index
์ ๊ฐ์ 0์ด ์๋ 1์ด ๋์ค๋ฉด result
๊ฐ์ ์ถ๋ ฅํด์ฃผ์๋ค.
์๋ฃ๊ตฌ์กฐ ๊ด๋ จ๋ ๋ฌธ์ ๋ ์์ง๊น์ง๋ ์ฌ์ด ๊ฒ ๊ฐ๋ค.
๐ Code
package DS;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.StringTokenizer;
public class N1966 {
public static Queue<Integer> box;
public static Queue<Integer> targetBox;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int num = Integer.parseInt(br.readLine());
int target;
int count;
box = new LinkedList<>();
targetBox = new LinkedList<>();
for (int i = 0; i < num; i++) {
st = new StringTokenizer(br.readLine());
count = Integer.parseInt(st.nextToken());
target = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
PrinterQueue(count, target, st);
box.clear();
targetBox.clear();
}
}
public static void PrinterQueue(int count, int target, StringTokenizer st) {
int num;
int targetNum;
int max = 0;
int result = 0;
for (int i = 0; i < count; i++) {
num = Integer.parseInt(st.nextToken());
max = Math.max(max, num);
box.add(num);
if(i == target) {
targetBox.add(1);
}else{
targetBox.add(0);
}
}
int totalCount;
int currentCount = count;
boolean flag = false;
for (int i = max; i > -1; i--) {
totalCount = currentCount;
for (int j = 0; j < totalCount; j++) {
num = box.poll();
targetNum = targetBox.poll();
if (num == i) {
currentCount -= 1;
result += 1;
if (targetNum == 1) {
System.out.println(result);
return;
}
flag = true;
break;
} else {
box.offer(num);
targetBox.offer(targetNum);
}
}
if(flag){
flag = false;
i++;
}
}
}
}
package (์ด๋ฆ); ๋ฅผ ๋๊ณ , class ์ด๋ฆ์ Main
์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐