백준 소가 길을 건너간 이유 1

KIMYEONGJUN·2025년 4월 21일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 줄에 관찰 횟수 N이 주어진다. N은 100 이하의 양의 정수이다.
다음 N줄에는 한 줄에 하나씩 관찰 결과가 주어진다.
관찰 결과는 소의 번호와 위치(0 또는 1)로 이루어져 있다.

첫 줄에 소가 길을 건너간 최소 횟수를 출력한다.

내가 이 문제를 보고 생각해본 부분

소마다 마지막으로 확인된 위치를 저장한다.
관찰 기록을 순서대로 처리하면서, 만약 같은 소의 위치가 이전 관찰과 다르면 ‘길을 건넜다’고 판단해 횟수를 1 증가시킨다.
처음 관찰한 소의 위치는 이전 위치가 없으므로, 횟수를 증가시키지 않고 위치만 기록하다.
모든 관찰을 처리한 뒤 누적된 횟수가 답이다.
lastPos 배열을 크기 11(소 번호가 1~10이므로 인덱스 맞춤)로 만들고, 모든 값을 -1로 초기화한다.
-1은 아직 해당 소의 위치를 관찰하지 않았다는 의미이다.
관찰 횟수 N을 입력받는다.
N번 반복하며 한 줄씩 관찰 결과(소 번호, 위치)를 읽는다.
만약 lastPos[cow]가 -1이면, 이 소는 이번이 처음 관찰된 것이므로 위치만 저장하다.
그렇지 않고, lastPos[cow]와 현재 위치가 다르면, 소가 길을 건넌 것으로 간주하고 count를 1 증가시킨다.
현재 관찰 위치를 lastPos[cow]에 저장해 다음 관찰 시 비교할 수 있게 합니다.
모든 관찰을 마친 후 count를 출력한다.

코드로 구현

package baekjoon.baekjoon_27;

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

// 백준 14467번 문제
public class Main998 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        // 소 번호는 1~10, 위치는 -1로 초기화(아직 관찰 안됨)
        int[] lastPos = new int[11];
        for(int i = 1; i <= 10; i++) {
            lastPos[i] = -1;
        }

        int count = 0;
        for(int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int cow = Integer.parseInt(st.nextToken());
            int pos = Integer.parseInt(st.nextToken());

            // 이전 위치가 있고, 현재 위치와 다르면 횟수 증가
            if(lastPos[cow] != -1 && lastPos[cow] != pos) {
                count++;
            }
            lastPos[cow] = pos;
        }

        System.out.println(count);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글