BOJ_15721_번데기

2021. 12. 7. 11:31백준 알고리즘(BOJ)

1

구분: 구현, 시뮬레이션

언어: Java

전략:

  • 고정적인 부분(뻔 - 데기 - 뻔 - 데기)과 변화하는 부분(뻔(xN번) - 데기(xN번))을 분리
  • 구해야 하는 것이 '뻔'인지 '데기'인지 잘 구분하여 개수를 세고, 도달하였는지 체크
  • 도달 하였다면 전체 '뻔' 개수와 '데기' 개수를 더하여 총 몇 번 순선이 돌았는지 확인
  • 전체 사람 수 만큼 나누고, 1을 뺌(사람의 번호가 0부터 시작)  

2. 코드

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int t = scanner.nextInt();
		int type = scanner.nextInt();
		
		int round = 1; //몇번째 회차인가
		int ffun = 0; //뻔의 개수 
		int degi = 0; //데기의 개수 
		//뻔 - 0, 데기 - 1
		loop:while(true) {
			//매번 개수를 세고, 조건에 맞는t에 도달하였는지 체크한다 
			
			//고정적인 부분
			for(int i = 0; i<4; i++) {
				if(i%2==0) {
					ffun++;
				}
				else {
					degi++;
				}
				if(type==0) {
					if(ffun == t) {
						break loop;
					}
				}
				else {
					if(degi == t) {
						break loop;
					}
				}
			}
			
			//가변적인 부분
			for(int i = 0; i<=round; i++) {
				ffun++;
				if(type == 0 && ffun == t)
					break loop;
			}
			for(int i = 0; i<=round; i++) {
				degi++;
				if(type == 1 && degi ==t)
					break loop;
			}
			round++;
		}//loop
		
		//전체 몇번째 사람인지 구한다 
		int total = ffun + degi;
		int ans = total % n;
		
		//사람의 번호가 0부터 시작하기 때문에 1을 뺸다 
		//맨 마지막 번호의 사람
		if(ans == 0) {
			System.out.println(n-1);
		}
		else {
			System.out.println(ans-1);
		}
		
	}
}

3.

간단한 구현 문제였지만 오랜만에 문제를 푸는거다 보니 좀 버벅 거렸다 

꾸준히 문제를 풀어야 할 것이다!!!!

'백준 알고리즘(BOJ)' 카테고리의 다른 글

BOJ_14620_꽃길  (0) 2021.12.10
BOJ_16439_치킨치킨치킨  (0) 2021.12.07
BOJ_11725_트리의 부모 찾기  (0) 2021.11.19
BOJ_16938_캠프 준비  (0) 2021.11.12
BOJ_11279_최대 힙  (0) 2021.11.11