https://www.acmicpc.net/problem/1475
https://github.com/stellaluminary/Baekjoon
dictionary에 각 자릿수의 사용 횟수를 정한 뒤
6과 9의 횟수를 더한 것의 반에 올림한 것과 각 자리마다의 최대 횟수 중 큰 값을 출력한다.
유의해야할 점은 단순히 round로 반올림했을 때 오류가 난다.
그 이유는 round는 사사오입 원칙에 따르기 때문인데 반올림할 자리의 수가 5이면 앞자리 숫자가 짝수면 내림이고 홀수면 올림을 한다.
print(round(4.5)) # 4
print(round(3.5)) # 4
고로 올림을 위해 math.ceil 을 활용했다.
import math
n = list(input())
d = {}
for i in range(10):
d[str(i)] = 0
for i in n:
d[i] += 1
maxi = 0
s_n = 0
for j in d:
if j == '6' or j == '9':
s_n += d[j]
continue
maxi = max(maxi, d[j])
print(max(maxi, math.ceil(s_n/2)))
방법 1을 조금 더 간소화한 버전으로 단순히 index 기준의 count를 진행하고 별도의 함수 대신 6번째 자리에 대한 counting을 처리한다.
import math
r = [0 for i in range(10)]
for i in list(map(int, input())):
r[i] += 1
r[6] = math.ceil((r[6]+r[9])/2)
print(max(r[:9]))
math.ceil을 사용하지 않고 list counting만을 통해 해결하는 방법이다.
r = [0 for i in range(9)]
for i in list(input()):
if i in ['6', '9']:
r[6] += 1
else:
r[int(i)] += 1
if r[6] % 2 == 0:
r[6] //= 2
else:
r[6] = r[6] // 2 + 1
print(max(r))