알고리즘 풀이/백준
[백준 14667] 소가 길을 건너간 이유 1 (python)
char_lie
2023. 4. 27. 09:49
반응형
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)
반응형