문제 분석
- 1번이 공을 받는 경우부터 시작하는 부분을 주의하고, 공은 던지고 나서야 횟수가 증가함을 파악해야한다.
문제 분석
1) 공을 받은 횟수를 배열로 관리하여 홀수면 뒤로 2칸 짝수면 앞으로 2칸 이동시킨다.
2) 각각 이동할 경우 배열이기때문에 0보다 작아지는 경우와 배열 크기를 넘어서는 경우를 고려해서 다음 받을 사람을 정해야 한다.
3) 해당 횟수만큼 받으면 종료한다.
예시)
처음 : 1 0 0 0 0
1회 : 1 0 1 0 0
2회 : 1 0 1 0 1
3회 : 1 1 1 0 1
4회 : 1 1 1 1 1
5회 : 2 1 1 1 1
6회 : 2 1 1 2 1
7회 : 2 2 1 2 1
8회 : 2 2 1 2 2
9회 : 2 2 2 2 2
10회 : 3 2 2 2 2 (종료)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private static int N, M, L, ans, idx;
private static int[] arr;
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());
M = Integer.parseInt(st.nextToken());
L = Integer.parseInt(st.nextToken());
arr = new int[N];
idx = 0;
while (true) {
arr[idx]++;
if (arr[idx] == M) {
break;
} // M번 받는 경우 종료
if (arr[idx] % 2 != 0) {
idx = (idx + L) % N;
} else {
idx = (idx - L >= 0 ? idx - L : (N - (Math.abs(idx - L))));
}
ans++;
}
System.out.println(ans);
}// main
}// class-end
'Algorithm > BOJ' 카테고리의 다른 글
BOJ 8320 직사각형을만드는방법 (0) | 2021.03.04 |
---|---|
BOJ 2851 슈퍼마리오 (0) | 2021.03.04 |
BOJ 8958 OX퀴즈 (0) | 2021.03.04 |
BOJ 3052 나머지 (0) | 2021.03.04 |
BOJ 3985 롤케이크 (0) | 2021.03.04 |