코딩테스트/백준

[백준]1592번 영식이와 친구들 - Java

GAEBAL 2022. 3. 18. 23:09
728x90

문제

https://www.acmicpc.net/problem/1592

 

1592번: 영식이와 친구들

예제 1의 경우 일단 1번이 공을 잡는다. 1번은 공을 한 번 잡았기 때문에, 공을 3번에게 던진다. 3번은 공을 한 번 잡았기 때문에, 공을 5번에게 던진다. 5번은 2번에게 던지고, 2번은 4번에게 던진다

www.acmicpc.net

 

풀이

쉬운 문제임!

공을 다음 사람에게 전달할 때 인덱스 처리를 해주는 거만 쉽게 하면 정말 쉬운 문제인 것 같다!

다만 M이 1인 경우에는 게임이 시작하자마자 끝날 수 있으니까 그것만 주의해서 풀면 될듯??

 

자세한 설명은 주석을 참고하면 됨

 

코드

// 1592번 영식이와 친구들
// https://www.acmicpc.net/problem/1592

package BAEKJOON;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Num1592_영식이와친구들 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int L = Integer.parseInt(st.nextToken());

        int[] arr = new int[N];

        int count = 0; // 게임에서 총 몇번 공을 던지는지
        arr[0] = 1; // 처음 공을 받는 1번 친구도 받는거로 count
        int ball = 0; // 공이 누구한테 있는지 알기 위한 인덱스
        boolean isGameOver = false; // 기임 종료 조건 체크 플래그
        boolean flag = false; // while문 탈출하기 위한 플래그
        while (!isGameOver) {
            // M이 1이면 바로 게임 종료가 되야하므로 탈출 조건을 제일 먼저
            for (int i = 0; i < N; i++) {
                if (arr[i] == M) { // 공을 M번 받은 사람이 있으면 게임 종료
                    isGameOver = true;
                    flag = true;
                    break;
                }
            }
            if (flag) {
                break;
            }
            if (arr[ball] % 2 == 0) { // 0부터 시작이므로 홀수 짝수 반대로
                ball = (ball + L) % N; // 홀수면 시계 방향으로
            } else {
                ball = (ball + (N - L)) % N; // 짝수면 반시계 방향으로
            }
            arr[ball]++;
            count++;
        }

        System.out.println(count);
    }
}
728x90