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로 나누어 빈도 개수를 계산한다.
이후 빈도 리스트 중 최대값을 반환한다.
'Algorithm & SQL > Baekjoon' 카테고리의 다른 글
[Algorithm] [Python & Swift] 백준/BOJ - 2667 _ 단지번호붙이기 (0) | 2020.09.18 |
---|---|
[Algorithm] [Python & Swift] 백준/BOJ - 2178 _ 미로 탐색 (0) | 2020.09.17 |
[Algorithm] [Python & Swift] 백준/BOJ - 1316 _ 그룹 단어 체커 (0) | 2020.09.16 |
[Algorithm] [Python & Swift] 백준/BOJ - 2748 _ 피보나치 수2 (1) | 2020.09.15 |
[Algorithm] [python & Swift] 백준/BOJ - 7568 _ 덩치 (0) | 2020.09.15 |