카테고리 없음

[HSAT 7회 정기 코딩 인증평가 기출] 자동차 테스트 JAVA

_hanbxx_ 2024. 3. 26. 14:40
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