suheang

[백준] | JAVA, 자바 | 14467번 - 소가 길을 건너간 이유 1 본문

알고리즘

[백준] | JAVA, 자바 | 14467번 - 소가 길을 건너간 이유 1

suheang 2024. 9. 24. 21:49

https://www.acmicpc.net/problem/14467


문제 요약 :

소의 위치를 N번 관찰하는데, 각 관찰은 소의 번호와 소의 위치 하나씩으로 이루어져 있다. 존은 소를 10마리 가지고 있으므로 소의 번호는 1 이상 10 이하의 정수고, 소의 위치는 길의 왼쪽과 오른쪽을 의미하는 0과 1 중 하나다.

이 관찰 기록을 가지고 소가 최소 몇 번 길을 건넜는지 알아보자. 즉 같은 번호의 소가 위치를 바꾼 것이 몇 번인지 세면 된다.

 

( 소가 길을 건너간 최소 횟수를 출력 )


문제 풀이 :

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

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());

        int[] check = new int[n + 1];
        for (int i = 0; i <=n; i++) {
            check[i] = -1;
        }

        int total = 0;
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int cow = Integer.parseInt(st.nextToken());
            int position = Integer.parseInt(st.nextToken());

            if (check[cow] == -1) {
                check[cow] = position;
            } else if (check[cow] != position){
                total++;
                check[cow] = position;
            }
        }
        System.out.println(total);
    }
}

 

1. 관찰 횟수 n 입력받기

2. n + 1의 크기를 가진 배열 check 생성

3. 배열 check의 값을 -1로 변경

4. 소가 몇 번 길을 건넜는지 횟수를 저장할 변수 total 생성

5. n 만큼 for 문 동작

5 - 1. 소의 번호 입력받기, 소의 위치 입력받기

5 - 2. check 배열에서 소의 번호에 해당하는 값이 -1이라면 위치값으로 변경

5 - 3. 만약 그렇지 않고 check 배열에서 소의 번호에 해당하는 값과 소의 위치값이 다르다면 total++, 해당 값을 소의 위치값으로 변경

6. total에 저장된 값 출력