Playground/자바문제집

[백준] 2002번

미숫가루설탕많이 2023. 7. 1. 13:07
틀린 코드
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        Map<String, Integer> map = new HashMap<>();
        for (int i = 1; i <= N; i++) {
            map.put(br.readLine(), i);
        }

        int count = 0;
        for (int i = 1; i <= N; i++) {
            String car = br.readLine();
            if(map.get(car) > i)
                count++;
        }
        br.close();

        System.out.println(count);
    }
}

 

처음에는 Map 자료구조를 활용했다.

들어오는 차의 순서대로 value를 1씩 증가시키면서 map에 저장하고, 다시 입력을 받은 차의 순서대로 value 보다 크다면 추월한 것으로 판단하여 count를 증가시켰다.

 

결과는 실패.. value가 낮은 차들 중에서도 추월한 차들을 고려하지 않았다고 생각하여 다시 코드를 구성해봤다.

 

 

 

 

통과 코드
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        Map<String, Integer> map = new HashMap<>();
        for (int i = 1; i <= N; i++) {
            map.put(br.readLine(), i);
        }

        int count = 0;
        int[] arr = new int[N + 1];
        for (int i = 1; i <= N; i++) {
            arr[i] = map.get(br.readLine());
        }
        br.close();

        for (int i = 1; i < N; i++) {
            for (int j = i + 1; j <= N; j++) {
                if (arr[i] > arr[j]) {
                    count++;
                    break;
                }
            }
        }

        System.out.println(count);
    }
}

 

이번에는 배열을 추가해서 나간 차량들을 순서대로 먼저 기록했다.

그리고 중첩 반복문을 통해서 모든 차량을 비교하고, 현재 차량보다 앞에 있는 차량이 순서상 뒤에 있을 경우 추월한 차량으로 생각하고 카운트를 올렸다.

'Playground > 자바문제집' 카테고리의 다른 글

[백준] 21736번  (0) 2023.07.05
[백준] 11123번  (0) 2023.06.25
[백준] 1817번  (0) 2023.06.24
[백준] 1764번  (0) 2023.06.16
[백준] 5430번  (2) 2023.06.09