코딩테스트/PYTHON

[백준][PYTHON] 1157번 단어 공부

_알파카 2024. 6. 6. 13:30
728x90

문제

https://www.acmicpc.net/problem/1157

 

정답률이 40% 정도지만, 그렇게 어렵지는 않은 문제이다. 

주어진 단어에서 가장 많이 사용된 알파벳을 찾아내는 문제이며, 모든 값은 대문자로 변경한 후 생각하면 된다. 

먼저, 주어진 단어를 입력받고, 

중복을 제거한 알파벳 리스트를 생성한다. 

그 후, 알파벳 리스트를 순회하며, 주어진 단어에서 알파벳이 몇 번 나왓는지 센다. 

마지막으로 알파벳의 개수에 중복이 있는지 판별한 후, 가장 많이 나온 알파벳 혹은 ?를 출력한다.

틀린 풀이

# 주어진 단어 입력받기
word = input().upper()

# 중복을 제거한 알파벳 리스트
word_list = list(set(word))

# 주어진 단어에서 알파벳이 몇 번 나왔는지 담을 배열 res
res = []
for w in word_list:
    tmp = word.count(w)
    # 각 알파벳의 개수를 담음
    res.append(tmp)
    
# 알파벳의 개수에 중복이 있으면 set을 진행했을 때, 본래 word_list와 길이가 달라짐
if len(list(set(res))) == len(word_list):
    print(word_list[res.index(max(res))])
else:
    print('?')

틀린 부분이 없는 것 같았는데 틀렸다ㅠㅠ

처음에 코드를 작성할 때도 마지막에 중복을 체크하는 부분이 걸렸는데 아무래도 이 부분이 틀린 것 같아 바꾸어보았다. 

 

 

맞은 풀이

# 주어진 단어 입력받기
word = input().upper()

# 중복을 제거한 알파벳 리스트
word_list = list(set(word))

# 주어진 단어에서 알파벳이 몇 번 나왔는지 담을 배열 res
res = []
for w in word_list:
    tmp = word.count(w)
    # 각 알파벳의 개수를 담음
    res.append(tmp)
  
    
# 중복된 최댓값이 있는지 확인
if res.count(max(res)) <= 1:
    print(word_list[res.index(max(res))])
else:
    print('?')

 

앞서 배열의 길이를 측정하는 것과는 달리

res 배열의 최댓값 개수를 세는 쪽으로 바꾸었다. 

(왜 틀렸는지는 잘 이해되지 않는다)

 

728x90