๐ ๋ฌธ์
https://www.acmicpc.net/problem/20055
๋ฌธ์
๊ธธ์ด๊ฐ N์ธ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๊ฐ ์๊ณ , ๊ธธ์ด๊ฐ 2N์ธ ๋ฒจํธ๊ฐ ์ด ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๋ฅผ ์์๋๋ก ๊ฐ์ธ๋ฉฐ ๋๊ณ ์๋ค. ๋ฒจํธ๋ ๊ธธ์ด 1 ๊ฐ๊ฒฉ์ผ๋ก 2N๊ฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ ์นธ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 1๋ถํฐ 2N๊น์ง์ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ค.
๋ฒจํธ๊ฐ ํ ์นธ ํ์ ํ๋ฉด 1๋ฒ๋ถํฐ 2N-1๋ฒ๊น์ง์ ์นธ์ ๋ค์ ๋ฒํธ์ ์นธ์ด ์๋ ์์น๋ก ์ด๋ํ๊ณ , 2N๋ฒ ์นธ์ 1๋ฒ ์นธ์ ์์น๋ก ์ด๋ํ๋ค. i๋ฒ ์นธ์ ๋ด๊ตฌ๋๋ Ai์ด๋ค. ์์ ๊ทธ๋ฆผ์์ 1๋ฒ ์นธ์ด ์๋ ์์น๋ฅผ "์ฌ๋ฆฌ๋ ์์น", N๋ฒ ์นธ์ด ์๋ ์์น๋ฅผ "๋ด๋ฆฌ๋ ์์น"๋ผ๊ณ ํ๋ค.
์ปจ๋ฒ ์ด์ด ๋ฒจํธ์ ๋ฐ์ค ๋ชจ์ ๋ก๋ด์ ํ๋์ฉ ์ฌ๋ฆฌ๋ ค๊ณ ํ๋ค. ๋ก๋ด์ ์ฌ๋ฆฌ๋ ์์น์๋ง ์ฌ๋ฆด ์ ์๋ค. ์ธ์ ๋ ์ง ๋ก๋ด์ด ๋ด๋ฆฌ๋ ์์น์ ๋๋ฌํ๋ฉด ๊ทธ ์ฆ์ ๋ด๋ฆฐ๋ค. ๋ก๋ด์ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์์ ์ค์ค๋ก ์ด๋ํ ์ ์๋ค. ๋ก๋ด์ ์ฌ๋ฆฌ๋ ์์น์ ์ฌ๋ฆฌ๊ฑฐ๋ ๋ก๋ด์ด ์ด๋ค ์นธ์ผ๋ก ์ด๋ํ๋ฉด ๊ทธ ์นธ์ ๋ด๊ตฌ๋๋ ์ฆ์ 1๋งํผ ๊ฐ์ํ๋ค.
์ปจ๋ฒ ์ด์ด ๋ฒจํธ๋ฅผ ์ด์ฉํด ๋ก๋ด๋ค์ ๊ฑด๋ํธ์ผ๋ก ์ฎ๊ธฐ๋ ค๊ณ ํ๋ค. ๋ก๋ด์ ์ฎ๊ธฐ๋ ๊ณผ์ ์์๋ ์๋์ ๊ฐ์ ์ผ์ด ์์๋๋ก ์ผ์ด๋๋ค.
- ๋ฒจํธ๊ฐ ๊ฐ ์นธ ์์ ์๋ ๋ก๋ด๊ณผ ํจ๊ป ํ ์นธ ํ์ ํ๋ค.
- ๊ฐ์ฅ ๋จผ์ ๋ฒจํธ์ ์ฌ๋ผ๊ฐ ๋ก๋ด๋ถํฐ, ๋ฒจํธ๊ฐ ํ์ ํ๋ ๋ฐฉํฅ์ผ๋ก ํ ์นธ ์ด๋ํ ์ ์๋ค๋ฉด ์ด๋ํ๋ค. ๋ง์ฝ ์ด๋ํ ์ ์๋ค๋ฉด ๊ฐ๋งํ ์๋๋ค.
- ๋ก๋ด์ด ์ด๋ํ๊ธฐ ์ํด์๋ ์ด๋ํ๋ ค๋ ์นธ์ ๋ก๋ด์ด ์์ผ๋ฉฐ, ๊ทธ ์นธ์ ๋ด๊ตฌ๋๊ฐ 1 ์ด์ ๋จ์ ์์ด์ผ ํ๋ค.
- ์ฌ๋ฆฌ๋ ์์น์ ์๋ ์นธ์ ๋ด๊ตฌ๋๊ฐ 0์ด ์๋๋ฉด ์ฌ๋ฆฌ๋ ์์น์ ๋ก๋ด์ ์ฌ๋ฆฐ๋ค.
- ๋ด๊ตฌ๋๊ฐ 0์ธ ์นธ์ ๊ฐ์๊ฐ K๊ฐ ์ด์์ด๋ผ๋ฉด ๊ณผ์ ์ ์ข ๋ฃํ๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
์ข ๋ฃ๋์์ ๋ ๋ช ๋ฒ์งธ ๋จ๊ณ๊ฐ ์งํ ์ค์ด์๋์ง ๊ตฌํด๋ณด์. ๊ฐ์ฅ ์ฒ์ ์ํ๋๋ ๋จ๊ณ๋ 1๋ฒ์งธ ๋จ๊ณ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, K๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ A1, A2, ..., A2N์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๋ช ๋ฒ์งธ ๋จ๊ณ๊ฐ ์งํ ์ค์ผ๋ ์ข ๋ฃ๋์๋์ง ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
์ด ๋ฌธ์ ๋ ์ฌ์ค....ํ๊ธด ํ๋๋ฐ, ๋ด๊ฐ ๊ณผ์ฐ ์ต์ ์ผ๋ก ํ์๋์ง ์์ ์ด ์๋ค.
์ค๋ฒ3์ ํ๋ฅผ ์จ๋ ๋๋? (ใ ใ ) ์ฌ์ง์ด contains๋ผ๋ ๋ด์ฅํจ์๋ ์ผ๋๋ฐ ๊ทธ๋๋ ๋๋? ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์๊น? ์ถ์๋๋ฐ ๊ท์ฐฎ์์ ๊ทธ๋ฅ ๋ด์ฅํจ์ ์ฐ๊ณ ํธํ๊ฒ.....ํ์๋ค.
๐ก ๋ฒจํธ์ ํ์ ์ ์ปจํ ์ด๋์ ๋งจ ์ผ์ชฝ(left)์ ๋งจ ์ค๋ฅธ์ชฝ(right)์ ๊ฐ๋ฅดํค๋ ์ธ๋ฑ์ค๋ฅผ ์ค์ด๋ ๊ฒ์ผ๋ก ๊ตฌํํ๋ค. ๋ฒจํธ๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ํ๋ฏ๋ก, ํ ์นธ ํ์ ํ ๋๋ง๋ค ๋ฐ๋ก ์ด์ ์นธ์ด ํ์ฌ ์นธ์ผ๋ก ์ค๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๋งจ ์ผ์ชฝ/์ค๋ฅธ์ชฝ์ ๊ฐ๋ฅดํค๋ ๋ณ์์๋ ํ์ฌ ์ปจํ ์ด๋ ์ธ๋ฑ์ค๋ณด๋ค ํ ์นธ ์ด์ ์ ์ธ๋ฑ์ค๊ฐ ๋ค์ด์ค๊ฒ ๋๋ค.
๐ก ๊ธธ์ด 2N์ ๋ฒจํธ๋ 0~2N-1์ ์ธ๋ฑ์ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์ฌ๊ธฐ์ ๋งจ ์ผ์ชฝ๊ณผ ๋งจ ์ค๋ฅธ์ชฝ์ ๊ฐ๋ฅดํค๋ ์ธ๋ฑ์ค ๋ณ์์ ๊ฐ๊ฒฉ์ ์ปจํ ์ด๋ ๋ฒจํธ์ ์ ๋ฐ ๊ธธ์ด์ธ N์ผ๋ก ์ ์ง๋๋ค.
๐ก ๋งจ ์ค๋ฅธ์ชฝ์ ๋๋ฌํ๋ฉด ๋ก๋ด์ ํ์์ ์ผ๋ก ๋ด๋ ค์ค๊ฒ ๋๋ฏ๋ก, ์ปจํ ์ด๋์ ์ฌ๋ผ๊ฐ ๋ก๋ด์ ์ด ๊ฐ์๋ ๋งจ ์์ค์ ๊ธธ์ด N์ ๋์ง ๋ชปํ๋ค.
๋๋จธ์ง๋ ์ ์ฌํญ๋ง ์ ์ง์ผ์ ๋จ๊ณ์ ์ผ๋ก ์ฝ๋ฉํ๋ฉด ๋๋ค.
โ๏ธ <๋จ๊ณ๋ฅผ ์งํํ๋ค>
โ๏ธ ๋ฒจํธ๋ฅผ ํ์ ์ํจ๋ค.
โ๏ธ ์ฌ๋ ค์ ธ์๋ ๋ก๋ด๋ค์ ์์น๋ฅผ ํ๋์ฉ ์ฒดํฌํ๋ค. ๋งจ ์ค๋ฅธ์ชฝ ๋ก๋ด์ ๋ด๋ฆฌ๊ณ , ์ด๋ํ ์ ์๋ ๋ก๋ด์ ์ด๋์ํจ๋ค.
โ๏ธ ๋งจ ์ผ์ชฝ ์นธ์ ํ์ธํ์ฌ ๋ก๋ด์ ์ฌ๋ฆด ์ ์์ผ๋ฉด ์ฌ๋ฆฐ๋ค.
โ๏ธ ๋ก๋ด์ ๋ํ ๋จ๊ณ ์ค, ๋ด๊ตฌ๋๊ฐ 0์ธ ์นธ์ด ์๊ธฐ๋์ง ๊ณ์ํด์ ์ฒดํฌํด์ ๊ฐ์๋ฅผ ์นด์ดํธํ๋ค.
โ๏ธ <๋ด๊ตฌ๋๊ฐ 0์ธ ์นธ์ด K๊ฐ๊ฐ ๋์ผ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฃํ๋ค>
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
public class Main_๋ฐฑ์ค_20055_์ปจํ
์ด๋๋ฒจํธ์์๋ก๋ด_์ค๋ฒI {
static int N, K, left, right;
static int[] belt, robot;
static Queue<Integer> queue;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
belt = new int[2*N]; // ๊ฐ ์นธ์ ๋ด๊ตฌ๋ ์ ์ฅ
robot = new int[N]; // ๋ก๋ด์ด ์์นํ ์ปจํ
์ด๋ ์นธ์ ์ธ๋ฑ์ค ์ ์ฅ
queue = new LinkedList<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 2*N; i++) {
belt[i] = Integer.parseInt(st.nextToken());
}//input
left = 0;
right = N-1;
int cnt = 0;
while(K>0) { //๋ด๊ตฌ๋๊ฐ 0์ธ ์นธ์ ๊ฐ์
cnt++; //์งํ๋จ๊ณ
rotate();
}
System.out.println(cnt);
}//end of main
static void rotate() {
// ๋ฒจํธ ํ์
left = left-1<0 ? 2*N-1 : left-1;
right = right-1<0 ? 2*N-1 : right-1;
// ๋ก๋ด ๋๋ฆฌ๊ธฐ
int size = queue.size();
for(int i=0; i<size; i++) {
int robotIdx = queue.poll();
if(robotIdx==right) continue; //ํ์ฌ ๋ด๋ฆฌ๋ ์์น์ ์๋ค๋ฉด ํ์์ ๊บผ๋ธ ์ํ๋ก ๋
int newIdx = (robotIdx+1) % (N*2); //๋ก๋ด์ด ์ด๋ํ ์์น
// ์ด๋ํ๋ ค๋ ์์น์ ๋ด๊ตฌ๋๊ฐ 0์ด ์๋๊ณ ๊ทธ ๊ณณ์ ์ด๋ฏธ ๋์ฌ์ง ๋ก๋ด์ด ์๋ค๋ฉด
if(belt[newIdx]>0 && !queue.contains(newIdx)) {
belt[newIdx]--;
if(belt[newIdx]==0) K--;
if(newIdx==right) continue;
queue.offer(newIdx);
}else queue.offer(robotIdx);
}
// ๋ก๋ด ์ฌ๋ฆฌ๊ธฐ
if(belt[left]>0) {
belt[left]--;
if(belt[left]==0) K--;
queue.offer(left);
}
}
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ