아이공의 AI 공부 도전기

[Baekjoon] 1475번 : 방 번호 (Python, 구현)

 

     

 

 

 

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

코드 링크

https://github.com/stellaluminary/Baekjoon

 

GitHub - stellaluminary/Baekjoon

Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.

github.com

 

Python

 

방법 1 - 메모리 32952KB / 시간 72ms / 코드 길이 260B

 

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)))

 

 

방법 2 - 메모리 32952KB / 시간 72ms / 코드 길이 137B

 

방법 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]))

 

방법 3 - 메모리 30840KB / 시간 68ms / 코드 길이 202B

 

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))

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading