문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
코드
a=input().upper()
aCount=[0 for _ in range(26)]
for i in a :
aCount[ord(i)-65]+=1
maxValue=max(aCount)
if aCount.count(maxValue) == 1 :
print(chr(aCount.index(maxValue)+65))
else:
print('?')
코드 설명
a=input().upper()
aCount=[0 for _ in range(26)]
단어를 입력 받은 뒤, 대문자로 변경 시켜준것을 변수 a에 저장합니다.
그 후 각 글자들이 몇 번 나왔는지 기록할 배열 aCount를 만들어줍니다.
for i in a :
aCount[ord(i)-65]+=1
for문을 돌려 단어들을 이루는 알파벳들의 갯수를 셉니다.
maxValue=max(aCount)
aCount배열의 가장 큰 값을 담을 변수 maxValue를 생성해줍니다.
if aCount.count(maxValue) == 1 :
print(chr(aCount.index(maxValue)+65))
else:
print('?')
만약, 배열 aCount에서 maxValue이 한개라면 가장 많이 사용된 알파벳이 딱 하나 존재한다는 의미이므로,
배열 aCount에 maxValue값이 위치하는 인덱스값 + 65를 하여 아스키 코드 값을 맞춰주고, 그 문자를 출력합니다.
아니라면 '?'를 출력합니다.
관련 개념 정리
input
파이썬에서는 값을 사용자로부터 입력받을때 input함수를 사용합니다.
입력받은 값을 넣을 변수 이름 = input("띄울 메세지")
단! input함수는 입력받은 모든 내용을 문자열로 인식합니다. 따라서 입력받은 내용을 정수로 변환하려면
d = int(input())
와 같은 형태로 작성하거나, 나중에 변수를 사용할때
print(int(d)+2)
와 같이 int()로 감싸서 작성할 수 있습니다.
upper
upper함수는 소문자를 대문자로 바꾸어 반환해주는 함수입니다.
아래와 같은 형태로 사용합니다.
a="hungry"
a.upper
print(a)
#HUNGRY
for문
특정 코드들을 원하는 횟수 만큼 반복 시킬 때 사용하는것이 for문입니다.
for문의 기본 구조는 아래와 같습니다.
for i in 리스트(or 문자열, 튜플):
실행할 코드
리스트,문자열,튜플의 첫 글자나 요소부터 마지막 글자나 요소까지 차례대로 변수에 대입됩니다.
for문의 범위와 변수값을 숫자로 정하고 싶을때는 아래와 같이 range함수를 사용합니다.
for i in range(시작숫자,종료숫자,step):
실행할 코드
step은 얼만큼씩 변수를 증가 시킬지 정하는 것 입니다.
시작숫자와 step은 생략되어도 됩니다.
i를 사용하지 않고 코드를 반복만 하고 싶은 경우, i자리를 _(언더바)로 대체해서 사용합니다.
ord
ord는 주어진 값의 아스키 코드값을 반환해주는 함수입니다.
아래와 같이 사용합니다.
ord(변환할 값)
min, max
min과 max는 각각 최솟값과 최댓값을 리턴하는 함수로, 아래와 같이 사용합니다.
min(반복 가능한 자료형) #최솟값 리턴
max(반복 가능한 자료형) #최댓값 리턴
if문
<조건> 하면, <코드>를 실행하고 싶을때 쓸 수 있는것이 바로 if문입니다.
기본적인 형태는 아래와 같습니다.
if 조건문 1:
실행 코드 1 ...
elif 조건문 2:
실행 코드 2 ...
else:
실행 코드 3 ...
해석을 하자면, 조건문 1을 충족하면 실행 코드 1을 실행하고, 그게 아닌 조건문 2를 충족하면 실행 코드 2를 실행한다.
조건문 1과 조건문 2를 모두 충족하지 않으면 실행 코드 3을 실행한다. 입니다.
elif와 else는 필수는 아닙니다.
count
count는 특정 요소가 몇 개있는지를 세서 그 갯수를 반환해 주는 함수입니다.
a="aaavs"
print(a.count(a))
# 3
b=[1,3,4,3,5]
print(b.count(3))
# 2
문자열과 리스트에서 사용 가능합니다.
chr
chr는 아스키 코드값을 받아 코드에 해당하는 문자를 반환해주는 함수입니다.
아래와 같이 사용합니다.
chr(변환할 값)
index
index함수는 대상에 원하는 값이 있다면, 그 값의 위치를 반환해주는 함수입니다.
a="aksoce"
print(a.index(k))
# 1
b=[1,3,4,2,5]
print(b.index(4))
# 2
문자열과 리스트에서 사용 가능합니다.
산술 연산자
x+y | x 더하기 y |
x-y | x 빼기 y |
x*y | x 곱하기 y |
x/y | x 나누기 y |
x//y | x 나누기 y의 몫 |
x%y | x 나누기 y의 나머지 |
x**y | x의 y제곱 |
'코딩공부 > 알고리즘' 카테고리의 다른 글
[파이썬 풀이] 백준 2908.상수 (0) | 2021.12.05 |
---|---|
[파이썬 풀이] 백준 1152.단어의 개수 (0) | 2021.12.01 |
[파이썬 풀이] 백준 2675.문자열 반복 (2) | 2021.11.29 |
[파이썬 풀이] 백준 10809.알파벳 찾기 (0) | 2021.11.29 |
[파이썬 풀이] 백준 11720.숫자의 합 (0) | 2021.11.29 |