알고리즘/백준

백준-1157-단어 공부

hong2943 2024. 3. 26. 21:49

문제 해결

  • 딕셔너리 자료형을 통해서 각 단어의 알파벳을 센다.
  • 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