본문 바로가기

Algorithm & SQL/Baekjoon

[Algorithm] [Python & Swift] 백준/BOJ - 1475 _ 방 번호

1475 - 방 번호

 

문제


다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.

다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)

 

입력


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

 

출력


첫째 줄에 필요한 세트의 개수를 출력한다.

 

제출 코드


 

Python

from sys import stdin
num_list = list(map(int, stdin.readline().strip()))

num_frequency = [0] * 9

for num in num_list:
    if num in [6, 9]:
        num_frequency[6] += 1
    else:
        num_frequency[num] += 1

num_frequency[6] = (num_frequency[6] // 2) if (num_frequency[6] % 2 == 0) else (num_frequency[6] // 2 + 1)

print(max(num_frequency))

 

Swift

import Foundation

var numList = readLine()!

var numFrequency = Array(repeating: 0, count: 9)

for num in numList {
    if ["6", "9"].contains(num) {
        numFrequency[6] += 1
    } else {
        numFrequency[Int(String(num))!] += 1
    }
}

numFrequency[6] = numFrequency[6] % 2 == 0 ? numFrequency / 2 : numFrequency / 2 + 1

print(numFrequency.max()!)

다른 사람의 풀이

var plasticNum: [Int] = Array(repeating: 0, count: 10)
for n in (readLine()!) {
    plasticNum[Int(String(n)))!] += 1
}

plasticNum[6] = (plasticNum[6] + plasticNum.removeLast() + 1) / 2
print(plasticNum.max()!)

 

코드 설명


최소 몇개의 플라스틱 숫자 세트가 필요한지 계산하기 위해서는 0~9 까지의 숫자의 빈도수를 파악해야 한다.

 

이후, 만일 최다빈도 숫자가 [6, 9] 중 하나라면 6의 숫자 빈도를 올리고 그 외의 경우에는 해당 숫자의 빈도를 올린다.

 

6은 9로 대체가 가능하고 9는 6으로 대체가 가능하기에 두 숫자의 카운트를 한 곳에서 진행하고 마지막에 2로 나누어 빈도 개수를 계산한다.

 

이후 빈도 리스트 중 최대값을 반환한다.