백준

[백준_14467번] 소가 길을 건너간 이유 1

빙수빈수 2021. 8. 22. 23:53

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

 

14467번: 소가 길을 건너간 이유 1

3번 소는 위치 1, 0, 1에서 관찰되었으므로 길을 최소 두 번 건넜음을 확인할 수 있다. 4번 소도 길을 한 번 건넜으며, 나머지 소는 길을 건넌 기록이 확인되지 않는다.

www.acmicpc.net

[문제]

 닭이 길을 건너간 이유는 과학적으로 깊게 연구가 되어 있지만, 의외로 소가 길을 건너간 이유는 거의 연구된 적이 없다. 이 주제에 관심을 가지고 있었던 농부 존은 한 대학으로부터 소가 길을 건너는 이유에 대한 연구 제의를 받게 되었다.

 존이 할 일은 소가 길을 건너는 것을 관찰하는 것이다. 존은 소의 위치를 N번 관찰하는데, 각 관찰은 소의 번호와 소의 위치 하나씩으로 이루어져 있다. 존은 소를 10마리 가지고 있으므로 소의 번호는 1 이상 10 이하의 정수고, 소의 위치는 길의 왼쪽과 오른쪽을 의미하는 0과 1 중 하나다. 이 관찰 기록을 가지고 소가 최소 몇 번 길을 건넜는지 알아보자. 즉 같은 번호의 소가 위치를 바꾼 것이 몇 번인지 세면 된다.

 

[입력 조건]

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

 

[코드]

package BEAKJOON;

import java.util.*;

public class BaekJoon_14467 {
	static int[][] cow;
	static int n,count=0;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		n=sc.nextInt();
		cow=new int[n][2];
		
		for(int i=0;i<n;i++) {
			cow[i][0]=sc.nextInt();
			cow[i][1]=sc.nextInt();
		}
		
		// 소의 번호를 기준으로 오름차순으로 정렬한다.
		Arrays.sort(cow, new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				// TODO Auto-generated method stub
				return o1[0]-o2[0];
			}
		});
		
		int prev=cow[0][0]; // 이전 소의 번호
		int status=cow[0][1]; // 이전 소의 위치
		for(int i=1;i<n;i++) {
			int now=cow[i][0]; // 현재 소의 번호
			
			/*
			 * 현재 소의 번호가 이전 소의 번호와 같으면
			 * 상태가 변했다면 count를 증가시킨다. 
			 */
			if(prev==now) 
				if(status!=cow[i][1]) 
					count++;
			
			status=cow[i][1]; // 소 위치 갱신
			prev=now; // 소 번호 갱신
				
		}
		
		System.out.println(count);
	}

}

 

[고찰]

 이번 문제는 구현 문제로 특정 알고리즘 사용 없이 주어진 조건들을 정확하게 구현하면 정답 처리를 받을 수 있는 문제였다. 2차원 배열에 소의 번호와 상태를 입력 받고 현재 소의 번호가 이전 소의 번호와 같으면서 상태가 변한 경우에 count를 증가시키는 방식으로 해결했다.  

'백준' 카테고리의 다른 글

[백준_16439번] 치킨치킨치킨  (0) 2021.08.23
[백준_18243번] Small World Network  (0) 2021.08.23
[백준_14940번] 쉬운 최단거리  (0) 2021.08.22
[백준_10974번] 모든 순열  (0) 2021.08.22
[백준_3980번] 선발 명단  (0) 2021.08.22