[Python3]백준 1137. 단어 공부

장현수·2023년 6월 13일
0

알고리즘

목록 보기
9/9
post-thumbnail

문제

기존 풀이

# 대소문자 구분이 없으니, upper()로 대문자로 변환 후 시작
word = input().upper()

count_w = {}
# 이중 for문으로 각 글자별 개수를 딕셔너리에 담아줌
for w in word:
    count_w[w] = 0
    for i in range(len(word)):
        if w == word[i]:
            count_w[w] += 1

# 딕셔너리의 value(개수) 리스트를 내림차순으로 정렬한 리스트 할당
results = sorted(list(count_w.values()), reverse=True)
# 최댓값이 2개 이상일 경우 ? 출력
if results[0] == results[1]:
    print('?')
# 아닌 경우 딕셔너리에서 for문으로 최댓값을 value값으로 갖고 있는 key 출력
else:
    for key, value in count_w.items():
        if value == results[0]:
            print(key)
  • 답은 나오지만, 시간초과로 실패

구글링을 통해.. 통과한 풀이

# 처음부터 입력값을 받아 대문자로 만든다.
word = input().upper()

# 입력값에서 중복을 제거한 리스트를 만든다.
unq = list(set(word))

# 각 문자의 수를 세는 리스트를 만든다.
# unq를 돌면서 해당 문자가 word에 몇 개 있는지를 cnt리스트에 담는다.
cnt = []
for i in unq:
    cnt.append(word.count(i))

# cnt에서 최댓값이 2개 이상인 경우 ?를 출력한다
# 아닌 경우 cnt의 최댓값의 인덱스를 unq에서 찾아 출력한다.
if cnt.count(max(cnt)) > 1:
    print('?')
else:
    print(unq[cnt.index(max(cnt))])

중복 개수를 세어야 하니 절대로 중복제거를 하면 안된다는 생각이 패착이었다...

  • 중복을 제거한 리스트를 만들어서 각 문자의 개수를 센다.

max() 함수는 중복값이 안나온다는 것만으로 사용하지 않았었는데,
max()값을 count() 함수의 인자로 넣어주면, 최댓값이 몇 개인지 알 수 있다.

  • count() 의 인자로 max()값을 넣어주어 최댓값 중복 체크를 한다.
profile
개같이 발전하자 개발

0개의 댓글