[백준] 단계별 문제풀이 #1157 - 단어 공부

문제

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

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

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

풀이

아이디어
1. List 중복 제거를 통해 대상 데이터를 축소하여 연산 시간 단축
2. Dictionary 에서 Value의 Max 에 대한 Key 값 가져오기

testString = input().upper()

#중복제거
testSet = set(list(testString))
testList = list(testSet)

#문자열에서 문자 쓰인 개수 Get Dictionary
def getCountCharInString(argList):
    string = argList
    getDict = {}
    for char in string:
        getDict[char] = list(testString).count(char)
    return getDict

#String에서 가장 많이 쓰인 알파벳 출력
#문자별 쓰인 개수 Dictionary
getDict = getCountCharInString(testList)
#Dictionary 값 중 제일 큰 키 값 가져오기
maxKey = max(getDict,key=getDict.get)
#Dictionary 값에 대한 List
valueList = [value for key,value in getDict.items()]
#List 안에 Max 값 중복 존재 확인
if valueList.count(getDict[maxKey]) == 1:
    print(maxKey)
else:
    print('?')

검토
Function은 하나의 기능만 담아야 한다는 생각에, 굳이 함수 선언을 하지 않아도 되는 기능까지 함수화했다.
결과는 시간 초과의 반복이었다.
함수 선언 시 변수 선언도 해줬는데, 이 또한 메모리를 사용하는 것이므로 퍼포먼스에 영향을 줄 것으로 보인다.

결국 필수적인 함수를 선언하되 하나의 기능만을 담는 것이 좋을 것 같다.

출처 : https://www.acmicpc.net

좋은 웹페이지 즐겨찾기