반응형
https://www.acmicpc.net/problem/1157
코드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]
최대값의 위치
>>> 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)가 '?'이기 때문이다.
즉, 최대값이 여러개일 경우 '?'을 출력하기 위함이다.
반응형
'코딩테스트 연습 > 백준' 카테고리의 다른 글
[백준-python] 2908번 : 상수 (0) | 2019.08.16 |
---|---|
[백준-python] 2675번 : 문자열 반복 (0) | 2019.08.15 |
[백준-python] 10809번 : 알파벳 찾기 (6) | 2019.08.14 |
[백준-python] 11729번 : 하노이 탑 이동 순서(hanoi top in python) (0) | 2019.08.13 |
[백준-python] 2447번 : 별 찍기-10 (2) | 2019.08.07 |