너와!나의!알고!리즘!/백준

[백준 #1475, Python] 방 번호

moongchi98 2021. 1. 31. 22:35
문제 후기

너희 참 알뜰하구나,,? 나는 통장이 텅장인데,,

[문제]

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

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

 

[풀이]

🐤내 풀이

Room_no = input()
result = {}
for num in Room_no:
	#딕셔너리에 없다면 key를 숫자로, value를 숫자의 개수로 추가해주기
    if num not in result:
        result[num]=Room_no.count(num)
    else:
        continue

#6,9의 개수가 홀수일때
if (result.get('6', 0) + result.get('9', 0)) % 2 :
    result['mean'] = (result.get('6', 0) + result.get('9', 0))//2 + 1
    result.pop('9',"")
    result.pop('6',"")
#짝수일때
else:
    result['mean'] = (result.get('6', 0) + result.get('9', 0))//2
    result.pop('9',"")
    result.pop('6',"")
print(max(result.values()))
    

안다.. 내풀이,,뭔가,,무식하고,,이상한거 하지만 코알못의 머리에서는 정말 엄청난 고민 끝에 구한 풀이다.

우선 나는 dict형태를 사용하였다. key는 방 번호에 있는 숫자의 종류, value는 그 숫자들의 개수로 설정했다.

세트를 구하는 알고리즘은 간단하게, 제일 많이 나오는 숫자의 개수만큼 세트를 구매하면 된다. 하지만, 이 때, 6과 9는 서로 호환이 가능한데, 이걸 고려하는게 생각보다 까다로웠다.

만약에 9999777이란 숫자가 있다면 9가 제일 많이 존재해서 4세트를 사면될 거 같지만 한세트에 존재하는 6으로 9를 만들게 되면, max값인 9만 기준으로 잡으면 2세트가 필요하다. 하지만, 7을 만들기 위해서는 3세트가 필요하다.

그래서 나는 우선 방 번호에 있는 6과 9를 같이 치부해버리도록 if문을 작성했다. 딕셔너리에서 key가 없을 시 에러를 막기 위해 get을 활용했고, 기본 값으로 0을 설정했다. 6과 9의 합이 홀수라면 2로나눈 몫보다 한세트가 더필요하고, 짝수이면 딱 몫만큼 필요하다는 것을 이용했다.

그 이후에 6,9를 모두 dict에서 없애주고 mean이라는 key로 그 둘의 값의 평균을 넣어주었다.

그렇게 바뀐 result dictionary의 value들 중에서 max 값만 구하면 그게 바로 세트의 개수가 되서 출력 과정은 어렵지 않았다.

 

🐔 다른 분들의 코드를 봤는데,, 뭐가 어떻게 걸러지는지 잘 이해가 안된다..