본문 바로가기
백준(Python) 풀이

백준 1475번. 방 번호 (Python / 파이썬)

by yewonnie 2022. 4. 19.

문제

다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)

입력

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 필요한 세트의 개수를 출력한다.

문제 풀이

방 번호 문제의 핵심은

같은 번호의 최대 개수만큼 세트가 필요하다는 것입니다.

같은 번호는 한 세트 안에 하나만 존재하므로

같은 번호의 최대 개수만큼 세트가 필요합니다.

 

그런데 이때, 6은 9를 뒤집어서 이용할 수 있습니다.

따라서 6과 9의 개수를 세어줄 때는 둘 중 개수가 더 적은 것에 

더해주는 형식으로 개수를 세어주어야 합니다.

왜냐하면 만약 6이 2개이고 9가 3개인 상황에서

66999 -> 6 한 개, 6은 9로 대체 가능하므로 9 한 개

9 한 개, 9는 6으로 대체 가능하므로 6 한 개

마지막 9 한 개

이렇게 총 3개가 필요합니다.

이 과정을 살펴보면

6이나 9를 만날 때마다 개수가 더 적은 것에 수를 더해준다는

사실을 알 수 있습니다.

 

따라서 각 숫자의 개수를 저장할 list를 별도로 만들어준 뒤

위의 방법대로 각 숫자의 개수를 세어주고

그 중 최대 값을 출력해주면 됩니다.


My Code

n = input() # 다솜이의 방 번호

array = [0] * 10 # 각 숫자의 개수를 셀 list

for i in n:
    if i == '9' or i == '6': # 9 혹은 6이라면
        if array[9] <= array[6]: # 9의 개수가 더 작다면
            array[9] += 1        # 9의 개수를 count
        else:                    # 6의 개수가 더 작다면
            array[6] += 1        # 6의 개수를 count
    else:                    # 9 혹은 6이 아니라면
        array[int(i)] += 1   # 숫자의 개수를 세어줌

print(max(array)) # 개수 중 최대값을 출력

댓글