본문 바로가기
알고리즘 풀이/백준

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

by char_lie 2023. 4. 27.
반응형

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

 

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

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

www.acmicpc.net

소가 길을 건너간 이유 1

2개의 목초지가 있을 때 총 10마리의 소가 서로 다른 목초지로 이동하는 횟수를 구하는 문제

단순 구현 문제

📌 문제 접근 포인트

1. 소가 이동하는 것에 대해 나타내줄 리스트를 만들어주자.
2. 최초에 소가 자리에 없으면 해당 위치에 소를 넣어주자.
3. 다음에 같은 소가 선택됐는데 목초지의 위치가 다르다면 소를 그 목초지로 이동시키고, 횟수를 세어주도록 만들어주면 구현 성공

⚙️ 내가 푼 정답 코드 1

import sys
N = int(sys.stdin.readline())
cows = [2]*11
result = 0
for _ in range(N):
    cow, pasture = map(int,sys.stdin.readline().split())
    if cows[cow] == 2: # 소 없으면
        cows[cow] = pasture # 배정
    elif cows[cow] != pasture: # 소는 있는데 다른 목초지면
        cows[cow] = pasture # 그 목초지로 이동하고
        result += 1 # 움직임 증가
print(result)

⚙️ 내가 푼 정답 코드 2

# remove를 활용한 방식
# 수가 적어서 빠르게 사용 가능하지만, 수가 많은 케이스에선 권장되지 않음(시간초과)

import sys
N = int(sys.stdin.readline())
cows = [[],[]]
result = 0
for _ in range(N):
    cow, move = map(int, sys.stdin.readline().split())
    if cow not in cows[0] and cow not in cows[1]:
        cows[move].append(cow)
    else :
        if cow not in cows[move]:
            if move == 0 :
                cows[1].remove(cow)
                cows[0].append(cow)
            else :
                cows[0].remove(cow)
                cows[1].append(cow)
            result += 1
print(result)
반응형

댓글