[python] 백준 1157번 / 단어 공부 / dictionary 또는 set 활용 풀이

언덕·2021년 9월 13일

코딩테스트

목록 보기
6/8

1. 문제

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

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



2. 나의 풀이

(1) 첫번째 풀이 (딕셔너리📙 자료형 활용)

w=input().upper()	# 대문자로 치환
A={}				# {'알파벳' : 등장횟수, ...} 넣을 예정

for i in w:
    if A.get(i):	# 딕셔너리에 key 값 확인
        A[i]+=1
    else :
        A[i]=1
        
M = []			# value 값이 큰 item만 저장할 list...
for a, n in A.items():
    if len(M)>1:	 
        if M[1]==n:	
            M.append([a,n])	
        elif M[1]<n:
            M = [a,n]
    else : M=[a,n]
    
if len(M)>2:
    print('?')
else : print(M[0])

✔ 딕셔너리와 set는 각각 중복된 key 값을 허용하지 않거나 중복된 값을 허용하지 않는다는 점에서 비슷한 자료형이다. 처음에 알파벳은 key로, 알파벳이 나온 횟수는 value로 묶으면 좋겠다는 생각에 바로 딕셔너리를 도입했다.

딕셔너리로 묶고 난 후, value의 값으로 key값을 정렬해주기 위하여 정렬함수 sorted()를 활용했으면 좋았겠으나, sorted()가 떠오르지 않아 저렇게 노가다 프로세스를 구성하였다. (근데 sorted()를 쓰는 것도 복잡해보인다 🙄)



(2) 두번째 풀이 (set&list 활용 😘)

w = input().upper()
w_set = list(set(w))	# 알파벳 담는 리스트
cnt = []		# 알파벳이 등장한 횟수를 담는 리스트

for i in w_set:
    cnt.append(w.count(i))	# 등장한 횟수 차례차례 담아주기

if cnt.count(max(cnt)) >1:	# max 값이 몇 번 등장했는지 확인
    print('?')
else : 
    cnt_max_id = cnt.index(max(cnt))
    print(w_set[cnt_max_id])

두번째 풀이의 승리 👏



profile
언덕의 기록들 🐾

0개의 댓글