관리 메뉴

100세까지 코딩

[백준] 1157번 단어 공부 (파이썬) 본문

코딩테스트/파이썬

[백준] 1157번 단어 공부 (파이썬)

100세까지 코딩 2024. 1. 10. 17:13
문제

나의 생각
  • 입력받은 문자열을 대문자로 바꾼다.
  • max_count(최대 빈도수)와 max_alpha(가장 많이 사용된 알파벳) 선언
  • flag(가장 많이 사용된 알파벳이 여러 개 있는지) 선언
  • my_set(알파벳을 넣을 세트)를 선언하여 이미 있으면 반복문 통과
  • 반복문을 통해 문자열 첫 문자부터 s.count()를 써서 빈도수를 비교한다.
  • 최대값보다 크면 max_count에 저장하고 max_alpha를 해당 알파벳으로 바꾼다.
  • 단, max_count와 같으면 flag = False로 바꾼다
  • 반복문이 끝난뒤 flag에 따라 ?를 출력하거나 최빈수 알파벳을 출력한다.
나의 풀이
s = input()
s = s.upper()
max_count = 0
max_alpha = ""
flag = True
my_set = set()
for i in range(len(s) - 1):
    if s[i] in my_set:
        continue
    my_set.add(s[i])
    if max_count < s.count(s[i]):
        max_count = s.count(s[i])
        max_alpha = s[i]
        flag = True
    elif max_count == s.count(s[i]):
        max_count = s.count(s[i])
        max_alpha = s[i]
        flag = False

    print(max_alpha if flag else "?")
오류
  • 예제 3번과 같이 하나의 문자가 들어오면 반복문이 돌지않아 출력을 하지 않는다.
최종 풀이
s = input()
s = s.upper()
max_count = 0
max_alpha = ""
flag = True
my_set = set()
for i in range(len(s) - 1):
    if s[i] in my_set:
        continue
    my_set.add(s[i])
    if max_count < s.count(s[i]):
        max_count = s.count(s[i])
        max_alpha = s[i]
        flag = True
    elif max_count == s.count(s[i]):
        max_count = s.count(s[i])
        max_alpha = s[i]
        flag = False
if len(s) == 1:
    print(s)
else:
    print(max_alpha if flag else "?")
참고
  • 내가 봐도 코드가 깔끔하지 않고 더 효율적인 코드가 있을 것 같아 찾아보았다.
word = input().upper()  # word = baaa
alphabet_list = list(set(word))  # alphabet_list = ['b','a']
count_list = []

for i in alphabet_list:  # i = b,a
    count = word.count(i)
    count_list.append(count)  # count_list = [1,3]

if count_list.count(max(count_list)) >= 2:
    print("?")
else:
    print(alphabet_list[count_list.index(max(count_list))])