Baekjoon 1157번 python 단어 공부
https://www.acmicpc.net/problem/1157
첫 번째로 제시하는 코딩은 문제를 직관적으로 푼 것이다.
다소 장황한 면은 있지만 처음 시도로 바로 성공했던 풀이이다.
2번째 방식은 upper와 count를 이용한 방식으로 특히나 count 함수는 알파벳 개수를 세는 문제에서는 유용하다고 느껴진다.
첫 번째 방식
getStr=input() alpDict={chr(i):0 for i in range(ord('A'),ord('Z')+1)} for i in range(len(getStr)): if ord(getStr[i]) > 90: alpDict[chr(ord(getStr[i])-32)] +=1 else: alpDict[getStr[i]] +=1 maxalp='' maxnum=0 for i in alpDict.keys(): if alpDict[i] >= maxnum: if alpDict[i] > maxnum: maxalp='' maxalp+=i maxnum=alpDict[i] if len(maxalp) >1: print('?') elif len(maxalp) == 1: print(maxalp)
alpDict는 A부터 Z에 해당하는 key로 정리하고 0으로 초기화시킨다.
print(ord('a'), ord('A'),ord('a')- ord('A'))
print(ord('z'), ord('Z'),ord('z')- ord('Z'))
97 65 32
122 90 32
이를 통해 대문자와 소문자 사이에는 32 차이가 있다는 사실을 통해 입력값에 대한 알파벳의 숫자를 셀 때 사용한다.
최대값에 해당하는 알파벳을 구할 때는 if문을 2번 썻는데 2번째의 if문의 경우 이를 사용하지않으면 처음 maxnum의 값이 0일때 maxalp에 값을 지속적으로 추가하게 된다. 때문에 거추장스럽지만 넣을 수 밖에 없는 부분이었다.
2번째 방식
getStr = input().upper() alpDict={chr(i):0 for i in range(ord('A'),ord('Z')+1)} for i in alpDict.keys(): alpDict[i]=getStr.count(i) maxalp='' maxnum=0 for i in alpDict.keys(): if alpDict[i] >= maxnum: if alpDict[i] > maxnum: maxalp='' maxalp+=i maxnum=alpDict[i] if len(maxalp) >1: print('?') elif len(maxalp) == 1: print(maxalp)
처음 받을 때부터 upper를 쓰면 훨씬 간편해진다는 사실
더욱이 count('a')를 하면 단어의 'a'의 개수를 단번에 알려주니 윗부분이 더 깔끔해지는 것을 확인할 수 있다.
뒷 부분도 재량에 따라 더 줄일 수 있지만 귀차니즘으로 패스!
ALL RIGHT RESERVED TWINSTARINFO