본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 소가 길을 건너간 이유 1 : 14467번 - Python

728x90
반응형

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

 

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

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

www.acmicpc.net

 

 

 

문제를 풀면서 몰랐던 개념

 

(1) [Python] 딕셔너리

dict = {}

dict['a'] = 3
dict['b'] = 5
print(dict)

>> {'a': 3, 'b': 5}


dict2 = {'a':3, 'b':5 }
print(dict2['a'])

>> 3

 

(2) [Python] in / not in 연산자

-> 딕셔너리

: 딕셔너리는 그대로 in / not in 연산을 사용하면 key 값만 확인하게 된다

if a not in arr:
	arr[a] = b
	print(arr)

# a 값이 arr 딕셔너리에 없다면 arr{}에 {a:b} 추가!!

 

 

 

문제의 접근 방법

 

- 딕셔너리 사용

- not in 연산자 사용

 

 

 

내가 막혔던 부분

 

- 소가 방향을 바꿀 때마다 1을(소가 길을 건너간 횟수)를 증가시키는 방법

 

 

 

문제 풀이 방법

 

(1) 관찰 횟수 n번 입력 받기

(2) 소의 번호와 위치를 저장할 딕셔너리 arr 선언

(3) 소가 길을 건넌 횟수를 셀 변수 count 선언

(4) n번 만큼 반복문을 돌려 소의 번호와 움직인 위치(왼, 오) 를 a,b로 입력받기

(5) 만약 키 값 a (소의 번호)가 딕셔너리 arr에 없다면 키(a)값과 밸류(b)값을 arr에 저장

(6) 키 값 a(소의 번호)가 이미 딕셔너리 arr에 있다면 밸류 값 b(소가 움직인 위치)가 같은지 다른지 판별

(7) 만약 같다면 길을 건너지 않은 것이므로 다시 반복문으로 돌아가기

(8) 같지 않다면 길을 건넌 것이므로 숫자를 1 카운트 해주고 저장 & 그 값을 다시 딕셔너리에 넣기

(9) (4)~(8)의 과정을 반복해서 실행

(10) 소가 길을 건너간 최소 횟수(count) 출력

 

 

 

소스코드

n = int(input())

arr = {}
count = 0

for i in range(n):
    a,b = map(int, input().split())
    if a not in arr:
        arr[a] = b
    else:
        if arr[a] != b:
            count +=1
            arr[a] = b

print(count)
728x90
반응형