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

 

15721번: 번데기

예를 들어 7명이 있고, 16번째 등장하는 “뻔”을 부른 사람의 번호를 알고 싶다면 입력은 7 16 0이다. 4명이 있고 6번째 등장하는 “데기”를 부른 사람의 번호를 알고 싶다면 입력은 4 6 1이며, 이

www.acmicpc.net

코드풀이

완전탐색 + 구현 문제입니다.

이 문제에서 유의해야할점은

문제조건의 

  • T번째 ‘뻔’ 또는 ‘데기’를 외치는 사람은 위 원에서 몇 번 사람인지를 구하여라.

여기서 T번쨰 '뻔' 또는 '데기'가 뻔이 몇번째 인가를 구하는 것인줄 모르고

뻔과 데기를 합친 후 뻔과 데기 중에서 T번째를 구하는것이라고 이해했어서 해당부분에 시간이 오래 걸렸습니다.

 

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static int A, T, CALL;
public static int result = 0;
public static boolean CALLFLAG = false; //false면 '뻔' True면 '데기'
public static int cyclecnt = 2; //몇번쨰 주기인지 확인, 첫번쨰 주기부터 2번씩 하니 2로 설정
public static int BBUNCNT = 0; //뻔 횟수 - 뻔은 '0'
public static int DAEGICNT = 0; //데기 횟수 - 대기는 '1'
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
T = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
CALL = Integer.parseInt(st.nextToken());
simulate();
System.out.println(result);
}
public static void simulate() {
while(true) {
//첫 4번은 '뻔' - '데기' - '뻔' - '데기'
for(int i=0;i<4;i++) {
if(i%2 == 0) {
BBUNCNT += 1;
}
if(i%2 == 1) {
DAEGICNT += 1;
}
//'뻔' 이 특정 번째에 맞다면
if(BBUNCNT == T && CALL == 0) {
result = ( BBUNCNT + DAEGICNT - 1 ) % A;
return ;
}
//'데기' 가 특정번째에 왔다면
else if(DAEGICNT == T && CALL == 1) {
result = ( BBUNCNT + DAEGICNT - 1 ) % A;
return ;
}
}
// 2, 3, 4, 5, ... 이렇게 늘어난다.
for(int i=0; i<cyclecnt; i++) {
BBUNCNT += 1;
//'뻔' 이 특정 번째에 맞다면
if(BBUNCNT == T && CALL == 0) {
result = ( BBUNCNT + DAEGICNT - 1 ) % A;
return;
}
}
// 2, 3, 4, 5, ... 이렇게 늘어난다.
for(int i=0; i<cyclecnt; i++) {
DAEGICNT += 1;
//'뻔' 이 특정 번째에 맞다면
if(DAEGICNT == T && CALL == 1) {
result = ( BBUNCNT + DAEGICNT - 1 ) % A;
return ;
}
}
cyclecnt += 1;
}
}
}

+ Recent posts