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);
}
}