[백준] 1475번 방 번호 (Python)

Yeon·2022년 8월 13일
0

백준

목록 보기
1/6

💻 백준 1475번 방 번호

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

✍ 조건

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

✍ 알고리즘

  1. 6과 9를 하나로 보면 어떨까? 라는 생각을 해보았다.
    그래서 6이면 9로 바꿔서 리스트에 저장하고, 그 외의 숫자들은 그대로 저장한다.
str_input = input()
int_list = [int(i)+3 if i=="6" else int(i) for i in str_input]
  1. set()을 통해서 리스트 안에 중복을 제거한다. 그 안에서 한개씩 가져와서 int_list의 숫자별로 갯수를 세서 dictionary로 key, value로 저장한다.
    단, 9의 경우에는 갯수가 홀수이면, 2로 나눈 몫에 1을 더한 값을 저장하고, 짝수이면, 2로 나눈 몫만을 저장한다.
    ❓이유는 9는 6,9 모두 사용가능하다. 그렇기 때문에 나누기 2를 통해서 저장해준다.
for k in set(int_list) :
    if k == 9 and int_list.count(k)%2 == 1 :
        dict_list[k] = int_list.count(k)//2 + 1
    elif k==9 and int_list.count(k)%2 ==0 : 
        dict_list[k] = int_list.count(k)//2
    else :
        dict_list[k] = int_list.count(k)
  1. 여기서는 총 두가지의 방법으로 풀었는데, 코드상 깔끔한 것은 3-2번이 깔끔하게 해결한 것 같다.
    3-1 dictionary 내에서 max 값들의 key값을 리스트에 저장한다. (max 값이 여러개일 수도 있기 때문에) for문을 통해서 max값을 가진 key index를 통해 dictionary의 value값을 출력한다. 한번 나오고 바로 break를 통해 종료시킨다. 이 break를 사용했다는 점이 매우 거슬렀다. break를 사용한 이유는 중복된 max 값이 있을 경우 어차피 value 값들은 모두 같기에 아무거나 하나만 나오면 되기에 break를 사용하였다.
    max_dup_list = [j for j,v in dict_list.items() if 			v==max(dict_list.values())]
    for i in max_dup_list :
        print(dict_list[i])
        break
    3-2 dictionary 내에서 가장 큰 max 값 한 개의 key값을 저장한다. 그리고 dictionary에서 key값을 넣어서 value 값을 출력한다. 왜냐하면 위에서도 언급했듯이, 중복되도 상관없기 때문에 max값은 한개만 되어도 무관하다.
    max_value = max(dict_list, key = dict_list.get)
    print(dict_list[max_value])

👊 정리


str_input = input()
int_list = [int(i)+3 if i=="6" else int(i) for i in str_input]
dict_list = {}

for k in set(int_list) :
    if k == 9 and int_list.count(k)%2 == 1 :
        dict_list[k] = int_list.count(k)//2 + 1
    elif k==9 and int_list.count(k)%2 ==0 : 
        dict_list[k] = int_list.count(k)//2
    else :
        dict_list[k] = int_list.count(k)


max_value = max(dict_list, key = dict_list.get)

print(dict_list[max_value])

아직 부족한 점이 많으니 노력할 점이 많아보인다.. 3일차 화이팅..!

profile
Viel Erfolg!

0개의 댓글