본문 바로가기

Algorithm/Baekjoon BOJ

[백준][파이썬] 1475번 : 방 번호(코드, 해설, 풀이)

반응형

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

 

1475번: 방 번호

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

www.acmicpc.net

 

 

 


- 문제

  0~9에 해당하는 숫자 카드가 포함된 카드팩이 있는데, 입력에 주어진 숫자를 만들기 위해서 최소 몇개의 카드팩을 구매해야 하는지 알아내는 문제다.

 


- 해설

  입력받은 숫자에서 0~9가 각각 몇번 등장하였는지 횟수를 세어본 다음에 가장 많이 등장한 횟수를 출력하면 될 것 같지만, 숫자 6이나 9는 뒤집어서 9 또는 6으로 사용할 수 있다는 점을 기억해야 한다. 만약 6의 개수가 9의 개수보다 많다면 6을 9로 바꾸어서 균형을 유지해도 되고, 반대로 9의 개수가 6의 개수보다 많다면 마찬가지로 9를 6으로 바꿔도 된다.

 


- 풀이

import sys
N = sys.stdin.readline().strip()
nums = list(0 for _ in range(10))
for i in N:
    nums[int(i)] += 1
    if i == '6' and nums[6] > nums[9]:
        nums[6] -= 1
        nums[9] += 1
    elif i == '9' and nums[9] > nums[6]:
        nums[9] -= 1
        nums[6] += 1
nums.sort(reverse=True)
print(nums[0])

  입력 받은 문자열의 각 문자를 확인하면서 등장하는 횟수를 카운트해준다. 그 와중에 6이나 9가 여러 번 나오면 6을 9로 바꾸던지 9를 6으로 바꾸던지 하면서 카드팩을 최소한만 구매할 수 있도록 해주고 리스트를 sort해서 가장 많이 등장한 번호가 몇번 등장했는지 출력하도록 한다. 마지막에는 sort가 아니라 max를 사용하더라도 무방하다.

반응형