본문 바로가기
BaekJoon/Bronze

[BOJ/JAVA] 백준 1592 : 영식이와 친구들 (자바)

by HoonSikE 2022. 3. 25.
반응형
SMALL
문제 정보
  문제명   - 영식이와 친구들
  난이도   - 브론즈 II
문제 번호 - 1592번

문제 링크

BOJ_B2_1592_영식이와_친구들

 

1592번: 영식이와 친구들

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

www.acmicpc.net


문제
영식이와 친구들이 원형으로 모여서 시계방향으로 1부터 N까지 적혀있는 자리에 앉는다. 영식이와 친구들은 공 던지는 게임을 하기로 했다. 게임의 규칙은 다음과 같다.
일단 1번 자리에 앉은 사람이 공을 받는다. 그리고 나서 공을 다른 사람에게 던진다. 다시 공을 받은 사람은 다시 공을 던지고, 이를 계속 반복한다. 한 사람이 공을 M번 받았으면 게임은 끝난다. (지금 받은 공도 포함하여 센다.) 공을 M번보다 적게 받은 사람이 공을 던질 때, 현재 공을 받은 횟수가 홀수번이면 자기의 현재 위치에서 시계 방향으로 L번째 있는 사람에게, 짝수번이면 자기의 현재 위치에서 반시계 방향으로 L번째 있는 사람에게 공을 던진다.
공을 총 몇 번 던지는지 구하는 프로그램을 작성하시오.

입력
첫째 줄에 N, M, L이 입력으로 들어온다.
N은 3보다 크거나 같고, 50보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다.
L은 N-1보다 작거나 같은 자연수이다.

출력
첫째 줄에 공을 몇 번 던지는지 횟수를 출력한다.

예제 입력/출력
예제 입력 예제 출력
5 3 2 10
4 1 3 0
10 3 5 4
15 4 9 15

힌트
예제 1의 경우 일단 1번이 공을 잡는다. 1번은 공을 한 번 잡았기 때문에, 공을 3번에게 던진다.
3번은 공을 한 번 잡았기 때문에, 공을 5번에게 던진다. 5번은 2번에게 던지고, 2번은 4번에게 던진다. 4번은 1번에게 던진다. 1번은 이제 공을 두 번 잡았기 때문에, 공을 4번에게 던진다. 4번은 2번에게 던지고, 2번은 5번에게 던지고, 5번은 3번에게 던지고, 마지막으로 3번은 1번에게 던진다. 1번은 이제 공을 세 번 잡았기 때문에, 게임은 끝난다.

알고리즘 분류
● 구현
● 시뮬레이션

소스코드
package Lv1_Bronze;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
 * @author HanHoon
 * @category 구현, 시뮬레이션
 * https://www.acmicpc.net/problem/1592
 */
public class BOJ_B2_1592_영식이와_친구들 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		// 시계방향으로 1~N까지 적혀있는 자리에 앉는다
		int N = Integer.parseInt(st.nextToken());
		// 한사람이 공을 M번 받으면 게임은 끝난다. (1번부터 시작)
		int M = Integer.parseInt(st.nextToken());
		// 공을 받은 횟수가 홀수번이면 시계 반대로 L번째, 짝수번이면 자기의 현재 위치에서 반시계 방향으로 L번째 있는 사람에게 던진다.
		int L = Integer.parseInt(st.nextToken());

		int[] people = new int[N];
		// 처음은 첫번째 사람이 던짐
		int index = 0;
		int result = 0;
		while(true) {
			// index의 사람 던진횟수 + 1
			people[index]++;
			if(people[index] == M) break;
			
			// 받은 횟수가 홀수일 때
			if(people[index]%2 == 1) {
				// 반시계 방향 L번쨰 사람
				if(index-L >= 0)
					index -= L;
				else
					index = N + (index-L);
			// 받은 횟수가 짝수일 때
			} else {
				// 시계 방향 L번쨰 사람
				if(index+L < N)
					index += L;
				else
					index = (index+L) - N;
			}
			// 전체 던진 횟수 +1
			result++;
		}
		System.out.println(result);
		br.close();
	}
}

 


BaekJoon List
 

BaekJoon List

BOJ Start!! ● [BOJ] 백준 회원가입, 시작하는 법 ● [BOJ] 등급(티어) 및 Solved.AC 적용 ● [BOJ/JAVA] 백준 소스코드 제출 시 유의사항(자바) Bronze ● Bronze V  - ● Bronze IV  - ● Bronze III  -..

han-hoon.tistory.com


  

기회는 준비된 자에게 찾아온다.

 


 

반응형
LIST

댓글