https://www.acmicpc.net/problem/14467
문제
닭이 길을 건너간 이유는 과학적으로 깊게 연구가 되어 있지만, 의외로 소가 길을 건너간 이유는 거의 연구된 적이 없다. 이 주제에 관심을 가지고 있었던 농부 존은 한 대학으로부터 소가 길을 건너는 이유에 대한 연구 제의를 받게 되었다.
존이 할 일은 소가 길을 건너는 것을 관찰하는 것이다. 존은 소의 위치를 N번 관찰하는데, 각 관찰은 소의 번호와 소의 위치 하나씩으로 이루어져 있다. 존은 소를 10마리 가지고 있으므로 소의 번호는 1 이상 10 이하의 정수고, 소의 위치는 길의 왼쪽과 오른쪽을 의미하는 0과 1 중 하나다.
이 관찰 기록을 가지고 소가 최소 몇 번 길을 건넜는지 알아보자. 즉 같은 번호의 소가 위치를 바꾼 것이 몇 번인지 세면 된다.
입력
첫 줄에 관찰 횟수 N이 주어진다. N은 100 이하의 양의 정수이다. 다음 N줄에는 한 줄에 하나씩 관찰 결과가 주어진다. 관찰 결과는 소의 번호와 위치(0 또는 1)로 이루어져 있다.
출력
첫 줄에 소가 길을 건너간 최소 횟수를 출력한다.
입력을 문자열로 변환하고, 앞뒤 공백을 제거한 뒤, 각 줄을 배열의 요소로 나눔
각 줄의 내용을 숫자로 변환하여 2차원 배열로 만든다.
결과 예시: [[3, 1], [3, 0], [6, 0], [2, 1], ...].
첫 번째 줄은 관찰 횟수(N)이므로 제외하고, 나머지 관찰 기록만 records에 저장
예시: [[3, 1], [3, 0], [6, 0], [2, 1], ...].
crossings: 소가 길을 건넌 횟수를 저장할 변수. 처음에는 0으로 초기화.
cowPositions: 각 소의 현재 위치를 저장하는 객체.
- 키: 소의 번호
- 값: 해당 소의 현재 위치 (0 또는 1).
- for (const [cow, position] of records):
- records 배열에서 각 소의 번호(cow)와 위치(position)를 반복적으로 탐색.
- 각 관찰 기록을 순회하며 소의 번호(cow)와 위치(position)을 확인합니다.
- cow in cowPositions: 소가 이전에 관찰된 적이 있는지 확인.
- 관찰된 적이 있으면:
- cowPositions[cow] !== position: 이전 위치와 현재 위치를 비교.
- 다르면 crossings++를 증가.
- 관찰된 적이 있으면:
- 마지막으로 cowPositions[cow] = position을 통해 소의 현재 위치를 업데이트합니다.