๋ฌธ์ (Gold 5)
https://www.acmicpc.net/problem/20055
20055๋ฒ: ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด
๊ธธ์ด๊ฐ N์ธ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๊ฐ ์๊ณ , ๊ธธ์ด๊ฐ 2N์ธ ๋ฒจํธ๊ฐ ์ด ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๋ฅผ ์์๋๋ก ๊ฐ์ธ๋ฉฐ ๋๊ณ ์๋ค. ๋ฒจํธ๋ ๊ธธ์ด 1 ๊ฐ๊ฒฉ์ผ๋ก 2N๊ฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ ์นธ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 1๋ถ
www.acmicpc.net
ํ์ด
๋ฌธ์ ๊ฐ ์ฐธ,, ์ฌ๋ฌ๋ชจ๋ก ์ดํดํ๊ธฐ ์ด๋ ค์ ๋ค,,
๋ค๋ฅธ๊ฒ๋ณด๋ค ๊ฐ์๊ธฐ ์ถ๋ ฅํ๋ผ๊ณ ๋์จ ๋จ์ด์ธ '๋จ๊ณ'๊ฐ ๋ฌด์์ธ์ง ์์ ๋ฅผ ๋ช๊ฐ ๋๋ ค๋ณด๊ณ ์ผ ์์๋ ๊ฒ ๊ฐ๋ค.
์ฌ๊ธฐ์ 1-4์ ๋ฃจํด์ ํ ๋จ๊ณ๋ผ๊ณ ํ๊ณ , ์ข ๋ฃ๋๊ธฐ๊น์ง ์ด ๋ช๋ฒ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณค๋์ง๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
์ฒ์์ ์ผ์ ์์๋ก ๋์์๋ 1,2,3,4๊ฐ ํ ๋จ๊ณ๋ฅผ ๋ํ๋ด๋ ์ค ์์๊ณ ,
์์ 1์ ์ถ๋ ฅ์ด '2'๋ฒ ๋จ๊ณ, ์ฆ '๊ฐ์ฅ ๋จผ์ ๋ฒจํธ์ ์ฌ๋ผ๊ฐ ~' ๋ผ๋ ์ค ์์๋ค. ๋ฌธ์ ์ ๋ชจํธํ ์ ์ด ๋๋ฌด ๋ง๋ค ๐ฆ
๋ฌธ์ ์์ฒด๊ฐ ํท๊ฐ๋ ธ๋ ๊ฒ ์ธ์๋ ๋ณดํต์ ์๋ฎฌ๋ ์ด์ ๋ฌธ์ ์ฒ๋ผ ํ๋์ฉ ๊ตฌํ๋ง ํ๋ฉด ๋๋ค.
์์
- Belt๋ผ๋ ๋ด๊ตฌ๋์ ๋ก๋ด์ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์๋ค.
โ ๋ก๋ด์ ๋ฌด์กฐ๊ฑด ํ ์นธ์ ํ๋๋ง ์ฌ๋ผ๊ฐ ์ ๋ฐ์ ์๋ค. ๋ฐ๋ผ์ boolean ํ์ ์ ์ธ! - [1๋ฒ ์์] ์ปจ๋ฒ ์ด์ด๋ฅผ ๋ฐฐ์ด๋ก ๋ง๋ค์ด ๋ฒจํธ์ ํ์ ์ ๋ฐฐ์ด์ ํ์ ์ผ๋ก ๊ตฌํํ์๋ค.
โ i = 0 ๋ถํฐ i+1์ ๊ฐ์ ๋ณต์ฌํ๋ ๋ฐฉ์์ด๋ฉด, ๊ฐ์ด ๋ฐ๋ณต๋์ด ๋ณต์ฌ๋๋ค. ์ฆ, conv[0]์ ๊ฐ์ผ๋ก ๋ชจ๋ ๋ฐฐ์ด์ด ๋๋ฐฐ๋๋ค!
๋ฐ๋ผ์, 2*N-1๋ถํฐ i๋ฅผ ์ค์ฌ๋๊ฐ๋ฉฐ ๊ฐ์ ๋ณต์ฌํ์! - [1๋ฒ ์์] ๋ฒจํธ ํ์ ํ, N-1์ธ๋ฑ์ค์ robot์ ๋ฌด์กฐ๊ฑด false๋ก ๋ฐ๊พธ์. ( ๋ด๋ ค๊ฐ๋ ๊ณณ )
- [2๋ฒ ์์] ๊ฐ์ฅ ๋จผ์ ๋ฒจํธ์ ์ฌ๋ผ๊ฐ ๋ก๋ด -> i-1๋ถํฐ 0๋ฒ๊น์ง์ ์ปจ๋ฒ ์ด์ด ๋ฐฐ์ด ํ์
โ '๊ฐ์ฅ ๋จผ์ ์ฌ๋ผ๊ฐ'์ ์์ ๋ฐ๋ก ์์๋ฅผ ๊ธฐ์ตํ์ง ๋ง์!
์ด์ฐจํผ N ~ 2N-1๊น์ง๋ ๋ก๋ด์ด ๋ฌด์กฐ๊ฑด ์๊ณ , ๊ฒฐ๊ตญ์ ๋งจ ์ค๋ฅธ์ชฝ (N-1๊ณผ ๊ฐ๊น์ด์ชฝ)์ ์๋ ์ ๊ฐ ์ ์ผ ์ค๋๋ ์ ๋ค! - [2๋ฒ ์์] ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ํ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ก๋ด์ ์ด๋์ํค๊ณ N-1์ธ๋ฑ์ค์ robot์ ๋ฌด์กฐ๊ฑด false๋ก!
๋ฌธ์ ์ดํด๋ ํ๋ค๊ณ , ๊น๋ค๋ก์ด ์กฐ๊ฑด์ด ๋๋ฌด ๋ง์๋ ์ง์ ๋ถํ,,๋ฌธ์ ,,๐ฆ
์ฝ๋
package simulation;
import java.util.*;
import java.io.*;
public class BOJ_20055_์ปจ๋ฒ ์ด์ด๋ฒจํธ์์๋ก๋ด {
static class Belt{
int power;
boolean robot;
public Belt(int power) {
this.power = power;
this.robot = false;
}
}
static int N, K;
static Belt[] conv;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
conv = new Belt[2*N];
st = new StringTokenizer(br.readLine());
for(int i =0 ; i < 2*N ; i++){
conv[i] = new Belt(Integer.parseInt(st.nextToken()));
}
int stage = 1;
while(true){
// 1. ํ์
int p = conv[2*N-1].power;
boolean r = conv[2*N-1].robot;
for(int i = 2*N-1 ; i > 0 ; i--){
conv[i].power = conv[i-1].power;
conv[i].robot = conv[i-1].robot;
}
conv[0].power = p;
conv[0].robot = r;
conv[N-1].robot = false;
// 2. ๊ฐ์ฅ ๋จผ์ ์ฌ๋ผ๊ฐ ๋ก๋ด๋ถํฐ, ์ด๋
for(int i = N-1 ; i > 0 ; i--){
if(!conv[i].robot && conv[i-1].robot && conv[i].power >= 1){
conv[i].power --;
conv[i].robot = true;
conv[i-1].robot = false;
}
}
conv[0].robot = false;
conv[N-1].robot = false;
// 3. ์ฌ๋ฆฌ๋ ์์น์ ๋ก๋ด ์ฌ๋ฆผ
if(conv[0].power != 0){
conv[0].robot = true;
conv[0].power --;
}
if(!isValid()) break;
stage++;
}
System.out.println(stage);
}
private static boolean isValid() {
int cnt = 0;
for(int i = 0 ; i < 2*N ; i++){
if(conv[i].power <= 0) cnt++;
}
return cnt < K;
}
}
์ ์ถ
ํน๋ณํ ๋ฐ๋ก ์์ด ๋ฌธ์ ๋ง ์ ์ดํดํ๊ณ ์์ ๋ง ๋ค ๋ง์๋ค๋ฉด ํต๊ณผ ๊ฐ๋
'๐ ์๊ณ ๋ฆฌ์ฆ > Simulation' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2174๋ฒ: ๋ก๋ด ์๋ฎฌ๋ ์ด์ (JAVA) (0) | 2022.03.31 |
---|---|
[๋ฐฑ์ค] 16918๋ฒ: ๋ด๋ฒ๋งจ (JAVA) (0) | 2022.03.29 |
[๋ฐฑ์ค] 2933๋ฒ / 18500๋ฒ: ๋ฏธ๋ค๋ 1, 2 (JAVA) (0) | 2022.03.25 |