ALGORITHM/BOJ

[IM 대비] BOJ_1592 영식이와 친구들

lemon-scone 2021. 8. 28. 23:48

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

 

1592번: 영식이와 친구들

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

www.acmicpc.net

 

 

package IM_0828;

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

public class BOJ_1592_clean {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		st = new StringTokenizer(br.readLine(), " ");
		int N = Integer.parseInt(st.nextToken()); // 시계방향으로 1부터 N까지 적혀있는 자리에 앉는다
		int M = Integer.parseInt(st.nextToken()); // 한 사람이 공을 M번 받으면 게임이 끝난다
		int L = Integer.parseInt(st.nextToken()); // 공을 M번보다 적게 받은 사람이 공을 던질 때 L번째 있는 사람한테 공을 던진다
		
		int[] check = new int[N+1];
		check[1] = 1; // 일단 1번 자리에 앉는 사람이 공을 받는다
		
		int i = 1;
		int count = 0;
		
		while(true) {

			if(check[i]%2!=0) {
				i = i+L;
				if (i>N) i = i-N;
				check[i]++;
				count++;
			}

			else if (check[i]%2==0) {
				i = i-L;
				if (i<0) i = N+i;
				check[i]++;
				count++;
			}
			
			if (check[i]==M) {
				break;
			}
		}
		System.out.println(count);
	}
}

 

package IM_0828;

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

public class BOJ_1592 {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		st = new StringTokenizer(br.readLine(), " ");
		int N = Integer.parseInt(st.nextToken()); // 시계방향으로 1부터 N까지 적혀있는 자리에 앉는다
		int M = Integer.parseInt(st.nextToken()); // 한 사람이 공을 M번 받으면 게임이 끝난다
		int L = Integer.parseInt(st.nextToken()); // 공을 M번보다 적게 받은 사람이 공을 던질 때 L번째 있는 사람한테 공을 던진다
		
		int[] check = new int[N+1];
		check[1] = 1; // 일단 1번 자리에 앉는 사람이 공을 받는다
		
		int i = 1;
		int count = 0;
		
		while(true) {

			if(check[i]%2!=0) {
				//System.out.println("홀수 일 경우를 탐");
				//System.out.println("내자리 인덱스 : " + i);
				i = i+L;
				if (i>N) i = i-N;
				//System.out.println("공보내줄 인덱스 : " + i);
				check[i]++;
				//System.out.println("공보내준 인덱스" + i + " 값 : " + check[i]);
				count++;
				//System.out.println("공튀긴 횟수 : " + count);
				//System.out.println();
			}

			else if (check[i]%2==0) {
				//System.out.println("짝수 일 경우를 탐");
				//System.out.println("내자리 인덱스 : " + i);
				i = i-L;
				if (i<=0) i = N+i;
				//System.out.println("공보내줄 인덱스 : " + i);
				check[i]++;
				//System.out.println("공보내준 인덱스" + i + " 값 : " + check[i]);
				count++;
				//System.out.println("공튀긴 횟수 : " + count);
				//System.out.println();
			}
			
			if (check[i]==M) {
				break;
			}
		}
		System.out.println(count);
	}
}

 

테스트 출력 주석풀고 돌리면

 

 

풀 때 끄적거린 메모