본문 바로가기
알고리즘/문자열

[백준][Python] 9046번 복호화

by 임짠짠 2022. 6. 22.
반응형
 

9046번: 복호화

입력의 T(1 ≤ T ≤ 20)는 테스트 케이스로, 입력 제일 상단에 주어진다. 각각의 테스트 케이스는 한 줄마다 소문자와 공백으로 이루어진 영어 문장이 주어진다. 이 문장의 길이는 적어도 1이상이

www.acmicpc.net

 

 

 

코드

import sys
n = int(input())
for _ in range(n):
	dic = dict()
	n_list = list(sys.stdin.readline().rstrip())
	for i in n_list:
	   if i != " ":
		   if i in dic:
			   dic[i] += 1
		   else:
			   dic[i] = 1

	a = sorted(dic.values(), reverse=True)

	if (len(a)>1 and a[0] == a[1]) or len(a)==0:
	   print("?")
	else:
	   print(max(dic,key=dic.get))

 

설명

딕셔너리를 만들어서 알파벳이 나올 때마다 딕셔너리에 이미 존재하는지 확인하고 총 몇 번 나오는지 저장했다. 처음에 빈칸이 나올 때도 딕셔너리에 저장을 하게 해서 오류가 났다. 그래서 따로 예외를 만들어줬다.

dic.values()를 기준으로 내림차순 정렬을 했다. 정렬을 했을 때 첫 번째 숫자와 두 번째 숫자가 같으면 빈번하게 나오는 문자가 여러 개라는 뜻이기 때문에 "?"를 출력하게 했다. 빈칸만 입력받은 경우도 "?"를 출력해줘야 한다.

만약 빈번하게 나오는 문자가 하나임이 확인이 됐다면 max(dic.key=dic.get))을 통해 가장 큰 값을 갖는 key를 출력하게 했다.

반응형

댓글