[Python] 백준1475번 : 방 번호

hjeu·2025년 1월 19일

백준

목록 보기
20/48

💡문제

백준 1475번 문제 링크

🍀풀이

틀린코드

import math

n = input().strip()

arr = [0] * 10
cnt = 0

for i in n:
    arr[int(i)] += 1

# 6과 9의 횟수를 더해서 올림 처리
if (arr[9] > 0):
    arr[6] = math.ceil((arr[6] + arr[9]) / 2)  # 올림
    arr[9] = 0  # 9는 필요없으니 0

# 최대값 찾아서 세트 저장
cnt = max(arr)

print(cnt)

우선은 필요한만큼 +1을 시켜놓고 6이랑 9는 교환이 가능하니까 두개를 더해서 2로 나눠서 횟수를 저장한다. 9의 개수는 6과 함께 구해서 저장했으니 0으로 초기화 하고, 이제 arr 배열에 최댓값을 찾으면 그게 바로 세트 수가 된다!

아니 근데 왜 중간에 틀렸다고 나올까??? ㅠㅠㅠ 예제도 다 맞고 반례 3페이지까지 넣었을 때도 다 맞다고 나오는데....

< 코테스터디를 하면서 반례를 찾았다.666666을 입력하면 6이 나온다,,,>

수정코드

import math

n = input().strip()

arr = [0] * 10
cnt = 0

for i in n:
    arr[int(i)] += 1

# 6과 9의 횟수를 더해서 올림 처리
arr[6] = math.ceil((arr[6] + arr[9]) / 2)  # 올림
arr[9] = 0  # 9는 필요없으니 0

# 최대값 찾아서 세트 저장
cnt = max(arr)

print(cnt)

if문을 없애면 됐었다...!

정답코드

n = input().strip()

arr = [0] * 10
cnt = 0

for i in n:
    if i == "9" or i == "6":
        if arr[6] == arr[9]:
            arr[6] += 1
        else:
            arr[9] += 1
    else:
        arr[int(i)] += 1

print(max(arr))

그래서 찾아보니 이런식으로 다들 푸네여....
훔 뭐가 다르지
이것도 결국엔 밸런스를 맞춰서 최댓값을 구하는거 같은데....
아리송하다


profile
나는야 개발왕이 될거야! (๑ •̀ω•́)۶

0개의 댓글