코딩블로그
[HSAT 7회 정기 코딩 인증평가 기출] 자동차 테스트 JAVA 본문
728x90
https://softeer.ai/practice/6247
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
내가 푼 20점 짜리 코드
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
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());
int q = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
List<Integer> res = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i <n;i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
for (int i = 0; i < q;i++) {
int total = 0;
int totalB = 0;
int temp = Integer.parseInt(br.readLine());
if (Arrays.binarySearch(arr, temp ) < 0) {
res.add(0);
} else {
for (int j = 0; j < n; j++) {
if (arr[j] < temp) {
total++;
}
}
totalB = n - total - 1 ;
res.add(total * totalB);
}
}
for (int t : res) {
System.out.println(t);
}
}
}
시간 초과가 계속나서 힌트를 보니 이분탐색을 이용하라는 힌트를 보았다
그래서 자바의 binarySearch 메서드를 활용해서 풀었다
배열에서 특정 값을 찾을 때 항상 이분탐색 메서드를 생각하자!!
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
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());
int q = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
List<Integer> res = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i <n;i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
for (int i = 0; i < q;i++) {
int total = 0;
int totalB = 0;
int temp = Integer.parseInt(br.readLine());
if (Arrays.binarySearch(arr, temp ) < 0) {
res.add(0);
} else {
total = Arrays.binarySearch(arr,temp);
totalB = n - total - 1 ;
res.add(total * totalB);
}
}
for (int t : res) {
System.out.println(t);
}
}
}
728x90