문제 해결
- 딕셔너리 자료형을 통해서 각 단어의 알파벳을 센다.
- max_val 를 통해서 가장 많이 세어진 알파벳을 확인한다.
- error라는 변수를 이용하여 가장 많은 알파벳이 여러 개 있는지 체크
구현한 코드
text = input().upper()
check = {}
for i in text:
if i in check:
check[i] += 1
else:
check[i] = 1
max_val = 0
error = 0
for key, value in check.items():
if max_val < value:
max_val = value
result = key
error = 0
elif max_val == value:
error += 1
if error == 0:
print(result)
else:
print("?")
메모리 : 33076 KB
시간 : 208ms => 개선 필요
개선
- 가장 많이 나온 단어를 구분하는 수단으로 error라는 변수를 활용하여 전체 알파벳을 순환하면서 확인하는 방식을 사용했을 때 많은 시간을 소요했다.
- 그래서 다른 사람들의 코드를 참조해본 결과 set자료형과 count()함수를 적절히 활용하여 이 문제를 해결할 수 있었다.
개선 코드
### set 튜플을 활용한 풀이
word = input().upper()
word_list = list(set(word)) # 파이썬 집합 자료형을 통해서 중복을 한다.
'''
중복을 허용하지 않는다.
순서가 없다(Unordered)
'''
check = []
for i in word_list:
#문자가 몇 개있는지 확인
cnt = word.count(i)
# print(i ,cnt) # S 4 P 1 I 4 M 1 ... 로 출력
# word_list의 순서에 맞게 개수를 유지하는 list인 check에 개수 유지
check.append(cnt)
#최대값이 여러개 있으면 ? 출력
if check.count(max(check)) >= 2:
print("?")
else:
print(word_list[check.index(max(check))]) # check리스트에서 가장 큰값의 index를 통해서 word_list를 출력
메모리 33076 KB
시간 80 ms
- 집합(set) 특징
- 중복 허용 x
- 순서 x
'알고리즘 > 백준' 카테고리의 다른 글
백준-2563-색종이 (1) | 2024.04.06 |
---|---|
백준-8979-올림픽 (0) | 2024.04.05 |
백준-9017-크로스 컨트리 (0) | 2024.04.05 |
백준-11723-집합 (0) | 2024.03.27 |
백준-2979-트럭주차 (0) | 2024.03.26 |