❓ 문제
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
💡 해결하기
1️⃣
우선 단어 하나를 입력받는다.
이때, 대소문자를 구분하지 않는다고 하였고, 출력 결과는 ? 또는 대문자만 나와야 하기 때문에 단어의 문자를 모두 대문자로 통일해야 한다. (upper 이용)
2️⃣
단어에 등장하는 문자의 개수를 세어야 하기 때문에 먼저 set을 이용하여 중복을 제거하여 어떤 종류의 문자가 등장하는지 알아낸다.
3️⃣
그 후, 각각의 문자의 개수를 비교하면서 모두 세어 어떤 문자의 등장 횟수가 가장 많은지를 알아내고, 따로 기록해 둔다.
만약 가장 많이 등장하면서 그 등장 횟수가 같은 문자기 여러 개 있다면 그 여러개의 문자를 모두 기록해 두어야 한다.
4️⃣
문자를 기록해 둔 결과, 개수가 하나라면 그 문자를 그대로 출력하고, 개수가 여러개라면 가장 많이 사용된 알파벳이 여러 개라는 소리이므로 ?를 출력하면 된다.
💻 Python으로 코드 작성하기
word = input().upper() # 단어를 입력받은 후 각 알파벳을 모두 대문자로 만들기
alphabets = set(word) # word에서 여러 번 등장하는 알파벳의 중복을 없애어 word가 어떤 종류의 알파벳으로 구성되어 있는지를 알아내기
cnt = 0 # 가장 많이 등장한 횟수 (초깃값 0)
_max = [] # 가장 많이 등장한 알파벳 기록
for alphabet in alphabets: # 등장하는 알파벳 하나하나씩 탐색
if word.count(alphabet) > cnt: # word에서 현재 알파벳이 이전까지 가장 많이 등장한 횟수보다 더 많이 등장하였다면
cnt = word.count(alphabet) # cnt를 현재 알파벳 등장 횟수로 초기화
_max = [alphabet] # 가장 많이 등장한 알파벳을 현재 알파벳으로 리셋
elif word.count(alphabet) == cnt: # 현재 알파벳 등장 횟수가 이전까지 최대 등장 횟수와 같다면
_max.append(alphabet) # 리셋하지 않고 그 알파벳을 가장 많이 등장한 알파벳 리스트에 추가
if len(_max) > 1: # _max 리스트의 길이가 1보다 크면 최대 등장 횟수가 같은 알파벳이 여러개라는 의미이므로
print('?') # ? 출력
else: # _max 리스트의 길이가 1이면 가장 많이 등장한 알파벳이 하나이므로
print(_max[0]) # 그 알파벳 출력 (_max 리스트의 0번 요소이다.)
'코딩 테스트 연습 > 백준 bronze' 카테고리의 다른 글
[백준] B2. 피보나치 수 5 (Python) (0) | 2023.06.30 |
---|---|
[백준] B5. 팩토리얼 2 (Python) (0) | 2023.06.29 |
[백준] B2. 트럭 주차 (Python) (0) | 2023.06.17 |
댓글