https://www.acmicpc.net/problem/1157
# # 기본 세팅입니다.
# import sys
# sys.stdin = open('input.txt')
# input = sys.stdin.readline
# 문자열 입력값을 받는다. ( raw 데이터, 날것의 데이터를 먼저 받는다.)
str_raw = input().strip() # 문자열 끝에 포함된 개행문자 없애줘야 해서 strip이 들어가야함.
# 알파벳의 대소문자는 구분하지 않으므로 모두 대문자로 바꿔준다. ( 데이터 전처리 )
string = str_raw.upper()
# 알파벳을 카운트 할 수 있는 딕셔너리로 생성한다. ( 다른 방법도 있지만 딕셔너리 연습할겸 )
alphabet = {}
for char in string: # 데이터 전처리를 진행한 문자열을 순회하면서 진행한다.
alphabet[char] = alphabet.get(char,0) + 1 # key 값이 없을경우 새로 생성하고 value에 1 할당
# 만약 key 값 있을 경우 key값을 반환하고 + 1 로 할당
# 메서드를 이용하여 최대 빈도수를 구하기
max_value = max(alphabet.values())
# 이제 최대 빈도수가 나온 알파벳이 무엇인지 찾아보겠다.
# 단, 최대 빈도수가 나온 알파벳이 여러개면 '?' 출력
# 여러개가 나올 수 도 있으니깐 리스트로 받아온다.
max_keys = []
for key, value in alphabet.items(): # item 메서드 사용
if value == max_value:
max_keys.append(key)
# 여러개면 '?' 를 출력, 하나면 해당 알파벳 출력
if len(max_keys) > 1:
print('?')
else:
print(max_keys[0])
# 딕셔너리 메서드를 어느정도 숙지한 상태에서 풀어야 가볍게 풀리는 느낌!
# 반복문이 잘 이해가 안될 경우 디버그 해보면서 진행상황 확인
str_raw = input().strip()
string = str_raw.upper()
alphabet = {}
for char in string:
alphabet[char] = alphabet.get(char, 0) + 1
max_value = max(alphabet.values())
max_keys = []
for key, value in alphabet.items():
if value == max_value:
max_keys.append(key)
if len(max_keys) > 1:
print('?')
else:
print(max_keys[0])
1️⃣ 문자열 입력 및 전처리
str_raw = input().strip()
string = str_raw.upper()
- input().strip() : 입력받은 문자열에서 공백 및 개행 문자 제거
- .upper() : 모든 문자를 대문자로 변환하여 비교를 쉽게 만듦
2️⃣ 알파벳 개수 세기
alphabet = {}
for char in string:
alphabet[char] = alphabet.get(char, 0) + 1
- 빈 딕셔너리 alphabet을 생성하여 문자 개수를 저장
- for char in string : 문자열을 한 글자씩 반복하면서 확인
- alphabet.get(char, 0) + 1
- get(char, 0) : 해당 문자가 없으면 0을 반환
- +1 : 문자가 나타날 때마다 값을 증가
charcount.get(char, 0) 결과count[char] 값count 딕셔너리 상태
char | alphabet.get(char, 0) | 결과 | alphabet 딕셔너리 상태 |
'M' | 0 (없었음) | 1 | {'M': 1} |
'I' | 0 (없었음) | 1 | {'M': 1, 'I': 1} |
'S' | 0 (없었음) | 1 | {'M': 1, 'I': 1, 'S': 1} |
'I' | 1 (이미 있음) | 2 | {'M': 1, 'I': 2, 'S': 1} |
✅ 딕셔너리에 새로운 키가 추가되는 원리
3️⃣ 가장 많이 등장한 알파벳 찾기
max_value = max(alphabet.values())
- max(alphabet.values()) : 딕셔너리에서 가장 큰 값(최대 등장 횟수)을 찾음
4️⃣ 최대 등장 횟수를 가진 알파벳 찾기
max_keys = []
for key, value in alphabet.items():
if value == max_value:
max_keys.append(key)
- max_keys = [] : 최대 빈도수를 가진 알파벳을 저장할 리스트
- for key, value in alphabet.items() : 딕셔너리의 모든 요소를 확인
- if value == max_value : 최대 등장 횟수와 일치하는 문자만 max_keys에 추가
5️⃣ 결과 출력
if len(max_keys) > 1:
print('?')
else:
print(max_keys[0])
- 최대 빈도수를 가진 문자가 여러 개이면 '?' 출력
- 하나뿐이라면 해당 문자를 출력
'Baekjoon' 카테고리의 다른 글
2164. 카드 2 (0) | 2025.02.19 |
---|---|
18258. 큐 2 (0) | 2025.02.19 |
21862. 사각형 그리기 게임 (4) | 2025.02.17 |
4949. 균형 잡힌 세상 (0) | 2025.02.14 |
1018. 체스판 다시 칠하기 (0) | 2025.02.13 |