본문 바로가기
작업/Problem Solving

백준 1157(단어 공부) 파이썬(python) 해결

728x90

문제

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

단, 대문자와 소문자를 구분하지 않는다.

입력

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

출력

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

 

 

 

 

#백준 1157
text = input()

value = text.upper()
values = list(set(value))

maxcount = 0

for i in range(len(values)):
    cnt = value.count(values[i])
    if cnt == maxcount:
    	maxcount = cnt
        maxchar = '?'
    elif cnt > maxcount:
        maxcount = cnt
        maxchar = values[i]
    else:
        pass

print(maxchar.upper()) 

 

value는 입력한 값을 모두 대문자로 변환한 문자열을 저장합니다.
values는 set() 함수를 통해 문자열에서 중복된 값을 제거한 문자열 집합을 저장합니다.

 


(Mississipi 입력시 value = MISSISSIPIvalues = M, I, S, P 집합)

 

 

집합은 순서가 중요하지 않기 때문에 values에 저장된 순서는 재각각입니다.




for 내부는 values에 있는 M, I, S, P 의 문자가 value에 몇 개 있는지 계산하고,
그 값이 크다면(최대값이라면) maxcount에 저장합니다.


최대값이 같은 것이 2개 이상 나오게 되면 ? 출력을 위한 조건을 달아둡니다.

 

 


Mississipi 입력을 예로 들고, values에는 (M, I, S, P) 순서의 집합을 가진다고 가정합니다.

 

 

첫 values[i] 는 values[0]과 같으며 M입니다.


value.count(values[i]) = M의 개수인 1이 반환되며 cnt = 1이 됩니다.


처음 maxcount = 0이기 때문에 조건에서 elif인  cnt > maxcount에 해당하며
maxcount = 1, maxchar = 'M'입니다.



다음 반복 시에 values[1]이며 I입니다.
value.count(values[1]) = I의 개수인 4가 반환되며 cnt = 4입니다.
cnt > maxcount에 해당하며 maxcount = 4, maxchar = 'I'입니다.

 

 

S 차례가 되면 cnt와 maxcount의 값이 4가 되어 cnt == maxcount에 해당하며
maxchar = '?'가 됩니다.

 

 

-끝-

 

 

 

728x90