hye-log

[백준]1592번 영식이와 친구들(JAVA) 본문

CodingTest/Baekjoon

[백준]1592번 영식이와 친구들(JAVA)

iihye_ 2023. 7. 29. 18:02

0. 문제 링크

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

 

1592번: 영식이와 친구들

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

www.acmicpc.net

 

1. 문제 설명

1) 1부터 N까지 적혀있는 자리에서 시계방향으로 공 던지기

2) 현재 공을 받은 횟수가 홀수번이면 시계 방향으로 L번째, 짝수번이면 반시계 방향으로 L번째 사람에게 던짐

3) 한 사람이 공을 M번 받으면 게임은 끝남

 

2. 입출력

// input
5 3 2

// output
10

 

3. 코드

import java.util.*;

public class b1592 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); // 자리의 수
		int M = sc.nextInt(); // 공 받은 횟수
		int L = sc.nextInt(); // 다음 공 받는 사람
		
		int[] arr = new int[N]; // 원형
		
		int idx = 0; // 현재 공의 위치
		int ans = -1; // 공 던진 횟수
		boolean flag = false; // M번 받았는지 여부
		
		while(true) {
			
			for(int i = 0; i < arr.length; i++) { // M번 받았는지 확인
				if (arr[i] == M) {
					flag = true;
				}
			}
			if (flag == true) { // true이면 반복문 종료
				break;
			}
			
			arr[idx]++; // idx번째 공 받은 횟수 추가
			
			if(arr[idx] % 2 == 1) { // 홀수번이면
				idx = idx + L; // 시계 방향으로 L번째
			} else { // 짝수번이면
				idx = idx - L; // 반시계 방향으로 L번째
			}
			
			if(idx < 0) { // 0보다 작으면
				idx += N; // N 더하기
			} else if (idx >= N){ // N보다 크거나 같으면
				idx -= N; // N 빼기
			}
			
			ans++; // 공 던진 횟수 추가
		}
		System.out.printf("%d", ans);
	}
}

 

실행 결과

 

4. 회고

1) while 문을 사용하여 종료 조건을 설정하고, 시계 방향과 반시계 방향의 경우를 나눔

 

5. Github

https://github.com/iihye/Algorithm/blob/main/Baekjoon/b1592.java

728x90

'CodingTest > Baekjoon' 카테고리의 다른 글

[백준]11399번 ATM(JAVA)  (0) 2023.07.29
[백준]17413번 단어 뒤집기2(JAVA)  (0) 2023.07.29
[백준]2798번 블랙잭(JAVA)  (0) 2023.07.29
[백준]2567번 색종이 - 2(JAVA)  (0) 2023.07.29
[백준]14502번 연구소(Python)  (1) 2022.10.14
Comments