coding test

[파이썬] 1157. 단어 공부

잔망루피 2021. 4. 28. 20:21

문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

예제 입력 1

Mississipi

예제 출력 1

?

예제 입력 2

zZa

예제 출력 2

Z

예제 입력 3

z

예제 출력 3

Z

예제 입력 4

baaa

예제 출력 4

A

 

 

👼 나의 풀이

 

import sys
from collections import Counter

string=sys.stdin.readline()
string=string.upper()  # 모두 대문자 변환
dic=Counter(string)

def f1(x) :
    return dic[x]   # 값 반환

m=max(dic.keys(), key=f1)     # 가장 큰 값을 가지는 키
num=max(dic.values())
cnt=0

for d in dic.values() :     # 값
    if cnt > 1 :
        print("?")
        break
    elif d == num :
        cnt+=1
else :
    print(m)

 

Counter로 key=대문자, 값=문자열에서 대문자의 갯수인 딕셔너리 dic를 만들었다.

가장 큰 값을 가지는 키를 어떻게 구할지 몰라서 블로그를 참고했다.

max에 key로 f1함수를 넣는다.

f1 함수는 딕셔너리 값을 반환한다.

num에 가장 큰 딕셔너리 값을 담았다. 지금 보니 max를 두 번이나 썼는데 num=dic[m]이 더 낫다.

가장 큰 값이 2개 이상이면 ?를 출력했다.

break가 실행되지 않았으면 가장 많이 사용된 알파벳을 출력할 수 있다.

 

 

👧 다른 사람 풀이

 

# https://ooyoung.tistory.com/70
words = input().upper()		# 대문자로 변환
unique_words = list(set(words))  # 입력받은 문자열에서 중복값 제거

cnt_list = []
for x in unique_words:
    cnt = words.count(x)
    cnt_list.append(cnt)  # count 숫자를 리스트에 append

if cnt_list.count(max(cnt_list)) > 1:  # count 숫자 최댓값이 중복되면
    print("?")
else:
    max_index = cnt_list.index(max(cnt_list))  # count 숫자 최대값 인덱스(위치)
    print(unique_words[max_index])

 

문자열 words를 set으로 중복이 없는 문자열 리스트 unique_words를 만든다.

words에서 각 문자의 갯수를 세서 cnt에 저장하고 cnt_list에 각 문자들의 갯수를 담는다.

 

 

# https://leedakyeong.tistory.com/entry/%EB%B0%B1%EC%A4%80-python-1157%EB%B2%88-%EB%8B%A8%EC%96%B4%EA%B3%B5%EB%B6%80-%EC%84%A4%EB%AA%85
n=input().upper()   # 입력 및 대문자화
t=[]    # 알파벳 개수 저장할 리스트
for i in set(n) :   # 입력받은 알파벳 중 unique한 알파벳만
    t.append(n.count(i))    # 개수
idx=[i for i, x in enumerate(t) if x == max(t)]     # 최댓값 위치
if len(idx) > 1 : print("?")    # 최대값이 여러개면 ? 출력
else : print(list(set(n))[t.index(max(t))])     # 최댓값이 하나면 해당 알파벳 출력

 

위랑 같은 알고리즘

 

 

 

문제 출처 💁‍♀️ 백준

반응형

'coding test' 카테고리의 다른 글

[파이썬] 2754. 학점계산  (0) 2021.04.30
[파이썬] 11718. 그대로 출력하기  (0) 2021.04.29
[파이썬] 10809. 알파벳 찾기  (0) 2021.04.28
[파이썬] 1152. 단어의 개수  (0) 2021.04.28
[파이썬] 8958. OX퀴즈  (0) 2021.04.28