Notice
Recent Posts
문제 풀이 및 개발 공간
[백준] 2828번 사과 담기 게임 문제! (silver 5 본문
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
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));
StringTokenizer st=new StringTokenizer(br.readLine());
int n=Integer.parseInt(st.nextToken());
int m=Integer.parseInt(st.nextToken());
int j=Integer.parseInt(br.readLine());
int[] apple=new int[j]; //사과 개수에 따른 떨어지는 위치 저장
int start=1; //바구니는 m칸이므로 첫째칸의 위치
int startToE=m-1; //바구니 길이는 m인데, 바구니 처음 위치는 start이므로 나머지 바구니길이
//사과 저장 //즉 start+ startToE= 바구니 전체 길이
for(int i=0; i<j; i++) {
apple[i]=Integer.parseInt(br.readLine());
}
int num=0; //몇번째 사과인지,
int move=0; //몇번 움직였는지 저장
while(true) {
//사과가 떨어지는 위치가, 바구니 처음 위치와 바구니 마지막 위치
//안에 있으면 바구니 안에 떨어지는 것이므로 성공,
//이를 성공하였으므로, 다음번째의 사과를 호출하기 위해 num++
//마지막 사과는 apple.length-1인데, 이를 성공하면 ++이되어,
//num==apple.length이 되므로, num==apple.length에서 break;
if(apple[num]>=start && apple[num]<=(start+startToE)) {
num++;
if(num==apple.length) {
break;
}
}
//사과가 떨어지는 위치와, 바구니 시작점의 위치를 비교하며 바구니를 이동,
//이때 바구니 첫 위치와, 마지막 위치 사이에 사과가 떨어지면, 바구니에 들어가는데
//이는 if문에서 다 걸러주고, else로 넘어온 것들은 사과가 바구니에 떨어지지 않는
//경우가 넘어온 것이므로, 무조건 바구니를 이동해야 하는 상황이다.
//이때 사과가 떨어지는 지점이 바구니 시작점 보다 크다는 것은 바구니의 오른쪽으로
//떨어지는 것이므로, 바구니를 오른쪽으로 옮긴다. start++, move++;
//이렇게 옮기면 다시 while문을 돌고, 변한 시작점과 마지막 점을 비교하며 바구니에
//사과가 떨어지는지 판단, 만약 들어갔으면 if문에서 다음 사과를 호출하며 종료,
//떨어지지 않았으면 다시 else문으로 와서 사과를 옮긴다.
//사과가 떨어지는 위치가 start지점보다 작으면, 이는 바구니 왼쪽으로 떨어지므로,
//이때는 바구니의 시작점을 왼쪽으로 --해준다. 이렇게 계속 이동을 하면서,
//if문에서 사과가 안에 떨어지는지 잡아주고, 잡으면 다음번 사과 호출.,
//떨어지지 않으면, else문에서 다시 이동을 실시한다.
else {
if(apple[num]>start) {
start++;
move++;
}
else if(apple[num]<start) {
start--;
move++;
}
else {
continue;
}
}
}
System.out.println(move);
}
}
'백준공부 > java' 카테고리의 다른 글
[백준] 2476번 주사위 게임 문제! (bronze 3 (0) | 2022.07.31 |
---|---|
[백준] 5554번 심부름 가는 길 문제! (bronze 4 (0) | 2022.07.26 |
[백준] 2750번 수 정렬하기 문제! (bronze 2 (0) | 2022.07.26 |
[백준] 9655번 돌 게임 문제! (silver 5 (0) | 2022.07.26 |
[백준] 2442번 별 찍기5 문제! (bronze 3 (0) | 2022.07.26 |