Breaking

2019년 1월 1일 화요일

Baekjoon 1157번 python 단어 공부

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