개발자 톡

연습문제 톡 [21년 재직자 대회 예선] 비밀 메뉴

비밀메뉴 반례

등록일
2024-02-02 12:03:30
조회수
246
작성자
calmnature

테스트 케이스 26-3 / 32-3 / 33-3/ 34-3의 경우 통과를 하지 못 하는데 다음 코드에서 뭐가 잘못 됐을까요?

혹시 실패하는 입력 예시도 알려주시면 감사하겠습니다.

public class Main {
  static int[] pattern, btnControl, M_N_K;
  static final String secret = "secret";
  static final String normal = "normal";
  // M : 비밀 메뉴 길이, N : 사용자 버튼 입력 횟수, K : 버튼 수 (1 ~ K)
  public static void main(String[] args) throws IOException{
    setData();
    System.out.println(checkSecret());
  }

  private static String checkSecret() {
    int M = M_N_K[0]; int N = M_N_K[1]; int K = M_N_K[2];
    if(M > N)
      return normal;
    int index = 0;
    int checkCount = 0;
    for(int i = 0; i < N; i++){
      if(btnControl[i] == pattern[index]){
        checkCount++;
        index++;
      }else {
        index = 0;
        checkCount = 0;
        continue;
      }
      if(checkCount == M){
        break;
      }
    }
     
    return checkCount == M ? secret : normal;
  }

  private static void setData() throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    M_N_K = new int[]{
      Integer.parseInt(st.nextToken()),
      Integer.parseInt(st.nextToken()),
      Integer.parseInt(st.nextToken())
    };

    st = new StringTokenizer(br.readLine());
    pattern = new int[M_N_K[0]];
    for(int i = 0; i < M_N_K[0]; i++){
      pattern[i] = Integer.parseInt(st.nextToken());
    }

    st = new StringTokenizer(br.readLine());
    btnControl = new int[M_N_K[1]];
    for(int i = 0; i < M_N_K[1]; i++){
      btnControl[i] = Integer.parseInt(st.nextToken());
    }
     
    br.close();
  }
}
#[21년_재직자_대회_예선]_비밀_메뉴

이 카테고리의 톡 더보기