Algorithm/BOJ
BOJ 1592 영식이와친구들
wow
2021. 3. 4. 20:17
문제 분석
- 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