-
백준 1157 단어 공부 파이썬IT/알고리즘 2022. 2. 28. 22:49728x90
풀이
word = input().upper() word_list = list(set(word)) cnt = [] for i in word_list: cnt.append(word.count(i)) max_cnt = max(cnt) index_max_cnt = cnt.index(max_cnt) if cnt.count(max_cnt) > 1: print('?') else: print(word_list[index_max_cnt])
예제와 같이 Mississipi 를 입력했을 때로 풀이해보자.
word = input().upper()
입력 시 Mississipi 는 MISSISSIPI 모두 대문자로 입력된다.
word_list = list(set(word))
word_list 에는 set 함수로 중복값을 제거해준다. 결국 M I S P 가 남는다.
cnt = [] for i in word_list: cnt.append(word.count(i))
cnt 배열을 만들어 둔 후,
반복문을 돌린다. 길이는 word_list 만큼 하면 된다. 중복된 단어 모두를 반복할 필요가 없으므로.
cnt에 추가해줄건데, 입력받은 word의 i번째 개수를 받는다.
근데 참고로 set 함수는 중복은 제거해주지만 순서는 지마음대로이므로 M I S P 순서대로 나오는건 아님 랜덤임
어쨌든 M 을 받으면 M 이 1개구나 하고 cnt 에 1이 들어가는것.
max_cnt = max(cnt) index_max_cnt = cnt.index(max_cnt) if cnt.count(max_cnt) > 1: print('?') else: print(word_list[index_max_cnt])
굳이 필요없지만 배열 cnt 의 최댓값을 max_cnt 변수에 넣고,
이 최대값이 어느 위치에 있는지 index 함수를 사용하여 찾는다. cnt.index(max_cnt)
그리고 최댓값이 동일하게 있으면 안되므로 if문을 작성해주는데,
cnt.count(max_cnt) > 1 이라는 말은 cnt 라는 배열에서 최대값의 개수가 1개 이상이니 ? 라는 물음이다.
MISSISSIPI 를 예로 계속 들자면,
M이 1개, I 4개, S 4개, P 1개 여서, 최댓값 I, S 가 동일하게 4개이다.
최대값이 4인개 2개이니 (1개 이상이니)
출력에서 요구한대로 '?'를 출력한다.
그게 아니라면,
최대값이 위치한 자리의 word_list를 출력해준다.
설명을 적으면서도 여러번 생각해야되는 어려운 문제였다 ..ㅠ
다음에 한번 더 풀어봐야겠다.
오답 풀이
리스트 중 최댓값 구하는 법을 찾아보다 딕셔너리로 빠지게 되어 딕셔너리로 풀어보려 했다.
T = list(input()) count = {} for i in T : try: count[i] +=1 except: count[i] = 1 max_key = max(count, key=count.get) all_values = count.values() max_value = max(all_values) print(count) print(max_key, max_value)
시도는 좋았던 것 같다.
다만, 내가 그 이후를 어떻게 만드는지 모르는건지 아니면 더 복잡해지는걸지 모르겠지만,
가장 많이 사용된 알파벳이 여러 개 존재하는 경우 ?로 출력하는 부분에서 막혔다.
이것도 딕셔너리로 해결이 가능할까? 모르겠다.
'IT > 알고리즘' 카테고리의 다른 글
백준 2908 상수 (0) 2022.03.01 백준 1152 단어의 개수 파이썬 (0) 2022.02.28 백준 2675 문자열 반복 파이썬 (0) 2022.02.27 백준 10809 알파벳 찾기 파이썬 (0) 2022.02.25 백준 11720 숫자의 합 파이썬 (0) 2022.02.24