개발자 톡

연습문제 톡 [HSAT 7회 정기 코딩 인증평가 기출] 자동차 테스트

자동차 테스트 시간초과 문제 JAVA

등록일
2023-10-09 20:04:41
조회수
616
작성자
dg7989

JAVA로 해당 문제 테스트 통과하고 제출해서 시간초과가 뜨길래


이중 for문 지우고 while로 했는데도 해당 문제가 발생하네요.


혹시 어느 부분 수정하면 되는지 알려주실 수 있을까요?


감사드립니다.

import java.util.*;
import java.io.*;


public class Main
{
    public static void main(String args[]) throws IOException // 예외 처리
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 버퍼 리더

        StringTokenizer st = new StringTokenizer(br.readLine()); // 스트링 토큰화

        int n = Integer.parseInt(st.nextToken()); // n개의 자동차
        int q = Integer.parseInt(st.nextToken()); // q개의 질의

        long[] arr = new long[n]; // 연비 배열
        st = new StringTokenizer(br.readLine()); // 스트링 토큰화

        for(int i = 0; i < arr.length; i++){
            arr[i] = Long.parseLong(st.nextToken()); // 배열 입력 받음
            // System.out.println("Test : "+ arr[i]); //Test
        }

        Arrays.sort(arr); // 배열 순서대로
        // System.out.println(Arrays.toString(arr)); //Test

        long midValue = 0; // 기대값
        int cnt = 0; // 판별값
        // int last = arr.length - 1; // 마지막 포인터

        for(int i = 0; i < q; i++){ // 질의만큼 반복

            cnt = 0; // 판별값 초기화

            int j = 0; //j 포인터 초기화

            midValue = Long.parseLong(br.readLine()); // 한 줄씩 입력되므로 바로 받아오기

            // for(int j = 0; j < arr.length; j++){ // midValue 값과 배열 비교

            //     if(arr[j] != midValue){ //같이 않을 경우 cnt 진행
            //         cnt++;
            //         //cnt가 배열길이 초과 시 midValue는 배열내에 없음 => length+1
            //         //cnt가 있을 경우 해당 번호로 아래에서 확인
            //         // System.out.println("cnt is : "+cnt); //Test
            //     }else{ //일치하면 cnt 멈춤
            //         break;
            //     }

            // }


            //while로 바꿔보기 : 시간초과 문제 발생
            while (j < arr.length){
                if(arr[j] != midValue){ //같이 않을 경우 cnt 진행
                    cnt++;
                    //cnt가 배열길이 초과 시 midValue는 배열내에 없음 => length+1
                    //cnt가 있을 경우 해당 번호로 아래에서 확인
                    // System.out.println("cnt is : "+cnt); //Test
                }else{ //일치하면 cnt 멈춤
                    break;
                }
                j++;
            }


            //cnt에 따라 다르게 확인
            if (cnt == arr.length){ //배열 내에 midValue 없음
                System.out.println(0);
            } else if (cnt == 0){ //배열의 첫 번 째 요소
                System.out.println(0);
            } else if (cnt == arr.length-1){ //배열의 마지막 요소
                System.out.println(0);
            } else { //조합으로 앞뒤 곱하기
                System.out.println(cnt*(arr.length-cnt-1));
            }

        }

        br.close();
    }
}



#[hsat_7회_정기_코딩_인증평가_기출]_자동차_테스트
#java

이 카테고리의 톡 더보기