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보다 작거나 같은 자연수이다.
출력
첫째 줄에 공을 몇 번 던지는지 횟수를 출력한다.
풀이
/*
* 입력
* 1. 사람 수 N 한 명당 공 던지는 횟수 M 몇 번째에 던질지 L
* 출력
* 1. 총 공을 몇 번 던지는지
* 조건
* 1. 현재 공을 받은 횟수가 홀수면 시계 방향, 짝수면 반시계 방향
*
* >> 배열에 현재 받은 수 추가하기
*/
처음에는 num에 L%N을 계산해서 더했는데 문제를 보니까 L이 N 이하라서 그럴 필요가 없었다 문제를 더 자세하게 읽어야겠다
코드
package im형필수문제;
import java.io.*;
import java.util.*;
public class b2_1592_영식이와친구들 {
public static void main(String[] args) throws Exception {
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[] chair = new int[N+1];
int total = 0;
//가지고 있는 사람 번호
int num = 1;
//1번 사람이 먼저 받고 시작함
chair[1] = 1;
while(true) {
for(int i = 1; i<=N; i++) {
//받은 횟수가 M이면 종료
if(chair[i]==M) {
System.out.println(total);
System.exit(0);
}
}
//가지고 있는 사람의 번호가 홀수일 때
if(chair[num]%2==1) {
//오른쪽으로 돌리기
num = num+L;
//배열을 벗어나면 -N
if(num>N) num -= N;
}
//가지고 있는 사람의 번호가 짝수일 때
else {
//왼쪽으로 돌리기
num = num-L;
//배열을 벗어나면 +N
if(num<=0) num += N;
}
//받은 횟수 추가
chair[num]++;
//총 횟수 추가
total++;
}
}
}
결과
#자바 #java #boj #백준 #알고리즘
'알고리즘 > BOJ' 카테고리의 다른 글
[java][boj][s4] 2477. 참외밭 (0) | 2022.02.25 |
---|---|
[java][boj][s1] 2564. 경비원 (0) | 2022.02.25 |
[java][boj][b2] 8320. 직사각형을 만드는 방법 (0) | 2022.02.25 |
[java][boj][s3] 17413. 단어 뒤집기 2 (0) | 2022.02.25 |
[java][boj][g5] 7569. 토마토 (0) | 2022.02.24 |