Q15721뻔데기

haram·2022년 12월 8일
0

문제

T번째 "뻔" 또는 "데기"를 외치는 사람의 번호 구하기

문제소감

간단히 반복문을 풀 수 있는 문제지만 반례를 찾느라 헤맸던 문제이다.
또한 코드를 좀 더 간결하게 구현하기 위해 전,후위 연산자와 반복문네이밍을 적용시킨 문제이다.

  • 전위 연산
    if(++Qjs == T && stat==0 ) break;
    Qjs를 먼저 증가시킨후 T와 비교
  • 후위 연산
    if(Qjs++ == T && stat==0 ) break;
    T와 먼저 비교한 뒤 Qjs를 증가시킴

이중반복문 중지기법

LOOP1 :
			while(Qjs <=10000 && eprl <= 10000) {
       			Loop2 :
				for(int j = 0; j<=i; j++) {
					if(++Qjs == T && stat==0 ) break LOOP1;
				}
				for(int j = 0; j<=i; j++) {
					if(++eprl == T && stat==1 ) break LOOP1;
				}
				i++;
			}
  • 위의 코드와 같이 반복문 윗줄에 반복문의 이름을 붙힌뒤 이를 활용하여 중첩반복문을 내부반복문에서 한번에 종료 시킬 수 있음

구현코드

import java.util.*;
import java.io.*;
public class Q15721 {

	public static void main(String[] args) throws Exception{
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt();
		int T = sc.nextInt();
		int stat = sc.nextInt();
		
		int Qjs = 0;
		int eprl = 0;
		
		int i = 1;
			LOOP1 :
			while(Qjs <=10000 && eprl <= 10000) {
				if(++Qjs == T && stat==0 ) break;
				if(++eprl == T && stat==1 ) break;
				if(++Qjs == T && stat==0 ) break;
				if(++eprl == T && stat==1 ) break;
				
				for(int j = 0; j<=i; j++) {
					if(++Qjs == T && stat==0 ) break LOOP1;
				}
				
				for(int j = 0; j<=i; j++) {
					if(++eprl == T && stat==1 ) break LOOP1;
				}
				i++;
			}
		
		int answer = (Qjs + eprl)%A == 0 ? A-1:(Qjs + eprl) % A-1;
		System.out.print(answer);
	}

}

0개의 댓글