본문 바로가기
백준/구현

[백준] #14467 소가 길을 건너간 이유 1 (python)

by 똥먹는낙타 2022. 5. 5.
728x90
반응형

14467번: 소가 길을 건너간 이유 1 (acmicpc.net)

 

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

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

www.acmicpc.net

 

문제

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

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

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

입력

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

출력

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

 

예제 입력 1 복사

8
3 1
3 0
6 0
2 1
4 1
3 0
4 0
3 1

예제 출력 1 복사

3

 

# Code

import sys
input = sys.stdin.readline

n = int(input())

cows = [-1] * (n+1)
count = 0

for _ in range(n):
    cow, position = map(int, input().split())

    if cows[cow] == -1:
        cows[cow] = position
    else:
        if cows[cow] != position:
            count += 1
            cows[cow] = position

print(count)

# Comment

원랜 이차원배열에다가 위치를 입력받아서 앞에 꺼랑 비교하면서 0, 1 이나 1, 0 이 나올 경우 count를 더해주는 방식으로 코드를 짰는데 인덱스의 범위를 벗어나는 문제를 어떻게 해결해야할지 모르겠어서.. 다른 사람 코드를 결국 참고했다.

조금 허무했는데.. 그냥 처음부터 소들의 위치를 -1로 초기화한 배열을 하나 생성해주고, 처음 입력받은 위치가 있으면 그 값으로 바꿔준다. 만약에 처음 입력받은 위치가 아니라 이미 이동해있는 소의 새로운 위치가 입력값으로 들어온다면, 현재 위치 값과 비교해서 같지 않을 경우 count를 더해주고 새로운 위치 값으로 바꿔주는 것을 반복하면 된다.

728x90
반응형

댓글