링크
백준 1474
굉장히 여러번의 시도끝에 풀었다. 중간에 다른방법으로 풀었으면 더 빨리 풀었을 수도 있지만 공연히 지는 것 같아 고집을 부렸다.
다양한 오답이 나왔지만 기본적인 아이디어는 input을 받은 데이터들 각각을 카운트 하는 딕셔너리를 만들고 해당 딕셔너리의 밸류를 비교해 max값을 구하는 방법이다.
6과 9를 합쳐서 계산해야 하는데 이부분에서 실수를 많이 겪었다.
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):
를 실행하기 전에 이미 바로 위에 코드에서 맥스값이 결정되기 때문에 오류가 나는 것 같다고 알려주셨다.
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으로 바꿔버렸다.
이렇게 하고나니 오히려 코드도 간결해졌다.