100세까지 코딩
[백준] 1157번 단어 공부 (파이썬) 본문
문제
나의 생각
- 입력받은 문자열을 대문자로 바꾼다.
- 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))])
'코딩테스트 > 파이썬' 카테고리의 다른 글
[백준] 1316번 그룹 단어 체커 (파이썬) (0) | 2024.01.11 |
---|---|
[백준] 2941번 크로아티아 알파벳 (0) | 2024.01.10 |
[백준] 25083 새싹 (파이썬) + 따옴표 3개 표현 (0) | 2024.01.10 |
[백준] 5622번 다이얼 (파이썬) + 딕셔너리 자료형 (0) | 2024.01.09 |
[백준] 10809번 알파벳 찾기 (파이썬) (0) | 2024.01.09 |