[백준, JAVA] 2002번 : 추월

seunguk noh·2023년 7월 27일
0

Algorithm

목록 보기
9/23

1. 문제

2. 아이디어

  • 입력 받은 문자열(번호판)의 종류나 순서, 길이가 동적이라 배열과 Index를 활용하긴 어려울 것 같았다.
    따라서 Map을 활용하여 Key로 번호판, Value로 순서로 값을 관리하는 것이 좋겠다.

  • 단순히 나오는 순서만 고려한다면, 문제에 기입된 테스트 케이스 외에 반례를 통과할 수 없었다.
    (1명을 추월했으나, 다른 1명에게 추월당해서 결과적으로 나오는 순서는 똑같은 경우)

3. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;

public class BOJ_3_2002 {
	public static void main(String[] args) throws IOException  {
		
		// 문자열 여러개에 대해 값 비교, 숫자 카운트 등을 하려하면, 인덱스를 알기 어렵거나 동적인 경우가 많다 -> 맵을 써보자
		
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(bf.readLine());
	
		HashMap<String,Integer> ys = new HashMap<>();
		for (int i = 0; i < N; i++) {
			ys.put(bf.readLine(), i);
		}
		
		int[] arr = new int[N];
		
		// 나간 순서대로 불러서 배열에 담음
		for (int i = 0; i < N; i++) {
			arr[i]=ys.get(bf.readLine());
		}
		
		int count = 0;
		// 추월을 안했으면 오름차순으로 정렬이 되어 있어야 함
		for (int i = 0; i < N-1; i++) {
			for (int j = i+1; j < N; j++) {
				if(arr[i]>arr[j]) {
					count++;
					break;
				}
			}
		}
		
		System.out.println(count);
	}

}

4. 느낀점

  • Map 자료구조에 어느정도 익숙해진 것 같다. 문제를 보고 떠올릴 수 있을 정도가 되었다.

  • 주어져 있는 Test Case 통과만 고려하지 말자는 교훈을 얻었다 ^_^;

1개의 댓글

comment-user-thumbnail
2023년 7월 27일

글 잘 봤습니다.

답글 달기