코딩테스트 연습/백준

[백준-python] 1157번 : 단어공부 설명

슈퍼짱짱 2019. 8. 15. 09:00
반응형

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net


코드1

n=input().upper() # 입력 및 대문자화
t=[] # 알파벳 개수 저장할 list
for i in set(n): # 입력받은 알파벳 중 unique한 알파벳만
    t.append(n.count(i)) # 개수
idx = [i for i,x in enumerate(t) if x==max(t)] # 최대값 위치
if len(idx)>1:print("?") # 최대값이 여러개면 ? 출력
else : print(list(set(n))[t.index(max(t))]) # 최대값이 하나면 해당 알파벳 출력

코드설명

 

"Mississipi"를 예시로 설명.

 

입력 및 대문자화

>>> n=input().upper()
Mississipi
>>> n
'MISSISSIPI'

 

입력받은 각 알파벳 개수

>>> t=[]
>>> for i in set(n):
           t.append(n.count(i))
>>> t
[4, 1, 1, 4]

 

set() 함수 설명 바로가기

list.count() 함수 설명 바로가기

 

최대값의 위치

>>> idx = [i for i,x in enumerate(t) if x==max(t)]

>>> idx

[0, 3]

 

최대값의 개수에 따라 출력

>>> if len(idx)>1:print("?")
       else : print(list(set(n))[t.index(max(t))])

?

 

 


코드2

n=input().upper()
i=0;x=0;m=0;
exec("t=n.count(chr(i+65))\nif t==m:x=-2\nif t>m:x=i;m=t\ni+=1;"*26)
print(chr(x+65))

코드설명

 

모든 대문자 알파벳 A~Z까지 입력받은 단어에 각각 몇 번 있는지 세고,

그 값이 최대값인지 아닌지 확인한다.

exec("t=n.count(chr(i+65))\nif t==m:x=-2\nif t>m:x=i;m=t\ni+=1;"*26)

위 코드는 아래 코드와 같다.

for i in range(26) :
    t=n.count(chr(i+65))
    if t==m :
        x=-2
    if t>m :
        x=i
        m=t

chr(0+65) ~ chr(25+65) 는 아스키코드에서 대문자 알파벳 A ~ Z를 나타낸다.

t==m일 때 x=-2 하는 이유는 chr(-2+65)가 '?'이기 때문이다.

즉, 최대값이 여러개일 경우 '?'을 출력하기 위함이다.

 

반응형