개발자 톡
연습문제 톡
[HSAT 7회 정기 코딩 인증평가 기출] 자동차 테스트
자동차 테스트 시간초과 문제 JAVA
- 등록일
- 2023-10-09 20:04:41
- 조회수
- 671
- 작성자
- 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