백준 1475

Byeonghyeon Kim·2021년 2월 1일
0

알고리즘문제

목록 보기
5/93
post-thumbnail

링크

백준 1474

방 번호


굉장히 여러번의 시도끝에 풀었다. 중간에 다른방법으로 풀었으면 더 빨리 풀었을 수도 있지만 공연히 지는 것 같아 고집을 부렸다.

다양한 오답이 나왔지만 기본적인 아이디어는 input을 받은 데이터들 각각을 카운트 하는 딕셔너리를 만들고 해당 딕셔너리의 밸류를 비교해 max값을 구하는 방법이다.

6과 9를 합쳐서 계산해야 하는데 이부분에서 실수를 많이 겪었다.


오답 1

numbers = list(map(int, input()))
dic = {}
max = 0
same = 0

for number in numbers: #딕셔너리로 만들어 숫자가 몇개씩 나오는지 key:val로 만듦 
    if dic.get(number) == None:
        dic[number] = 1
    else:
        dic[number] += 1

for key, val in dic.items(): 
    if key == 6 or key == 9:
        same += val
    if max < val:
        max = val
        if max < ((same + 1)//2):
            max = (same + 1)//2
print(max)

왜 안될까 하고 한참을 고민하다가 같은 반의 종백👨‍🏫님께 물어 봤다.
아래에서 3번째줄 if max < ((same+1) // 2): 를 실행하기 전에 이미 바로 위에 코드에서 맥스값이 결정되기 때문에 오류가 나는 것 같다고 알려주셨다.


오답 2

numbers = list(map(int, input()))
dic = {}
max = 0

for number in numbers: 
    if dic.get(number) == None:
        dic[number] = 1
    else:
        dic[number] += 1

if dic.get(6) != None:
    dic[6] = (dic[6]+1) // 2
    if dic.get(9) != None:
        dic[6] += (dic[9]+1) // 2
        dic[9] = 0
if dic.get(9) != None:
    dic[9] = (dic[9]+1) // 2

for key, val in dic.items(): #
    if max < val:
        max = val

print(max)

비교를 하기 전에 6과 9의 값을 합쳐주려 했다.
그러나 코드짜는게 미숙해서 인지 영 신통치 않았다.
아마 조건문을 계속 날리다가 어느부분이 꼬인것 같다.
이대로 풀었어도 코드가 지저분해 만족스럽지 않을 것 같았다.
다른방법을 생각해보기로 했다.


정답 코드

numbers = list(map(int, input().replace('9', '6')))
max = 0
dic = {}

for number in numbers: 
    if dic.get(number) == None:
        dic[number] = 1
    else:
        dic[number] += 1

if dic.get(6) != None:
    dic[6] = (dic[6]+1) // 2

for key, val in dic.items(): #
    if max < val:
        max = val

print(max)

아예 인풋을 받을때 9가 나오면 6으로 바꿔버렸다.
이렇게 하고나니 오히려 코드도 간결해졌다.


알게된 것👨‍💻

  • 데이터를 인풋 받을때 어떻게 받아와야 더 쉽게 다룰 수 있을지 생각하자.
profile
자기 주도 개발전 (개발, 발전)

0개의 댓글