단어 공부 성공분류
시간 제한 |
메모리 제한 |
제출 |
정답 |
맞은 사람 |
정답 비율 |
2 초 |
128 MB |
70482 |
26860 |
21781 |
38.617% |
https://www.acmicpc.net/problem/1157
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
알고리즘 분류
백준 알고리즘 # 1157번 : 단어 공부
word = input().lower() # word = mississipi / baaa
word_list = list(set(word)) # word_list = ['m', 'i', 's', 'p'] / ['b', 'a']
cnt = []
for i in word_list: # i = m, i, s, p / b, a
count = word.count(i)
cnt.append(count) # cnt = [4, 4, 1, 1] / [1, 3]
if cnt.count(max(cnt)) >= 2:
print("?")
else:
print(word_list[(cnt.index(max(cnt)))].upper())
풀이
문자열 단계 부분에서 가장 까다로운 문제였다...
먼저 예제 입력과 예제 출력만 보면 쉬울 것 같으나 변수의 설정이 좀 필요했다.
먼저 변수 word를 설정하고 lower()를 이용해서 입력받은 문자열을 소문자로만 입력받고
이것을 set()을 이용해서 자료형의 중복을 제거한 뒤 list()로 리스트로 묶었다.
다음으로 가장 많이 사용된 알파벳을 알기 위해서 cnt 변수를 [] 리스트로 초기화하면 변수 설정 끝.
word = mississipi
word_list = ['m', 'i', 's', 'p']
이제 word_list안에 들어있는 각각의 문자들을 for문으로 반복해주는데
count 변수를 새로 만들어서 중복되는 문자를 제외하기 전 입력받은 word 변수에서 그 문자가 몇 개 있었는지 count()를 이용해서 세고, cnt 변수 리스트에 append, 추가해준다.
cnt = [4, 4, 1, 1]
그리고 if 문을 사용해서 만약 cnt 변수 리스트에 가장 큰 값 max(cnt)를 count() 함수를 이용해서 센 개수가
cnt 변수 리스트 안에 2개 이상이라면! (말이 좀 복잡하지만 이해하고 넘어가셔야합니다....!!😂😂)
이 때는 가장 많이 사용된 알파벳, 즉 max(cnt)가 여러 개 존재하는 경우이기 때문에 "?"을 출력해준다.
그리고 그 나머지의 경우를 설명하기 위해서
예를 들어, 예제 입력 4의 경우
word = baaa
word_list = [b, a]
cnt = [1, 3]
위와 같은 코드에서 max(cnt)는 3이되고, index(3)은 cnt에서 cnt[1]에 위치하기 때문에
즉, index 자체가 가리키는 3이 cnt[1]이기 때문에 word_list[1]은 a를 가리키는데
이것이 uppercase()로 인해 대문자로만 출력되기 때문에 A가 출력된다. 풀이 끄-읏!!
자세한 코드가 궁금하신 분들은 아래 GitHub 참고해주세요🙏
최종 소스코드
'코딩테스트 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 | 5622 : 다이얼 (Python / 파이썬) (0) | 2020.09.21 |
---|---|
백준 알고리즘 | 2908 : 상수 (Python / 파이썬) (0) | 2020.09.21 |
백준 알고리즘 | 2675 : 문자열 반복 (Python / 파이썬) (0) | 2020.09.21 |
백준 알고리즘 | 10809 : 알파벳 찾기 (Python / 파이썬) (0) | 2020.09.21 |
백준 알고리즘 | 1065 : 한수 (Python / 파이썬) (0) | 2020.09.19 |
댓글