Baekjoon

1157. 단어 공부

영끼끼 2025. 2. 19. 10:55

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