파이썬 알고리즘

[파이썬] 백준 1475번 방 번호

뜻 지, 깨달음 오 2022. 10. 31. 17:32

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

 

1475번: 방 번호

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

www.acmicpc.net

 

bucket을 활용하면서 약간의 융용력이 필요한 문제였다.

 

일단, 방 번호를 list에 넣은 뒤, 각각 방 번호를 bucket에 넣었다.

그러면 6과 9 빼고 다른 번호들은 필요한 플라스틱 숫자를 반영한다.

bucket = [0]*10

arr = list(map(int, input()))

for i in range(len(arr)):
    bucket[arr[i]] += 1

 

6과 9는 서로 뒤집어서 사용할 수 있기 때문에, 6과 9의 개수 차이가 아무리 많이 나도

결국 필요한 숫자 세트의 수는 (6의개수+9의개수)/2이다.

위 식이 홀수일때는 한 세트가 더 필요하다는 의미이니까 해당 계산을 해준다.

six_and_nine = 0
if (bucket[6]+bucket[9])%2 == 0:
    six_and_nine = (bucket[6]+bucket[9])/2
else:
    six_and_nine = ((bucket[6]+bucket[9])//2)+1

 

결론적으로 필요한 숫자 세트의 수는 bucket에서의 최댓값과 six_and_nine이라는 변수를 비교했을때,

더 큰 값이 된다.

MAX = 0
for i in range(10):
    if i==6 or i==9:
        continue
    if bucket[i] > MAX:
        MAX = bucket[i]

print(int(max(MAX, six_and_nine)))

 

 

 

전체 풀이)

bucket = [0]*10

arr = list(map(int, input()))

for i in range(len(arr)):
    bucket[arr[i]] += 1

six_and_nine = 0
if (bucket[6]+bucket[9])%2 == 0:
    six_and_nine = (bucket[6]+bucket[9])/2
else:
    six_and_nine = ((bucket[6]+bucket[9])//2)+1

MAX = 0
for i in range(10):
    if i==6 or i==9:
        continue
    if bucket[i] > MAX:
        MAX = bucket[i]

print(int(max(MAX, six_and_nine)))