1) 사이트
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
2) 문제
요약하자면 소문자 대문자 상관 없이 가장 많은 갯수를 가진 알파벳을 대문자로 출력하는 것이다.
3) 파이썬 코드
sentence=input()
number=[0]*26
list(sentence)
same=0
max_index=0
for a in sentence:
index=ord(a.upper())-65
number[index]=number[index]+1
index=0
for b in number:
if b<number[max_index]:
index=index+1
continue
elif b>number[max_index]:
max_index=index
same=1
elif b==number[max_index]:
max_index=index
same=same+1
index=index+1
if same>1:
print("?")
else:
print(chr(max_index+65))
3-1) 선수 지식
파이썬 코드를 이해하기 위해 알아야 할 선수 지식이 있습니다.
1. 문자열을 리스트로 바꾸는 법
-> list(문자열)
2. 문자열 초기화 시키는 법
-> list 변수명 = [리스트를 채울 무언가]*몇개
3. 아스키코드
a는 97, A는 65이다.(b는 98 ....)
문자를 아스키코드로 바꾸려면 ord()
4. 소문자 -> 대문자 / 대문자 -> 소문자로 만드는 법
소문자 -> 대문자 : 문자.upper()
대문자 -> 소문자 : 문자.lower()
각각 대문자를 소문자로 만들 경우 이미 소문자인 경우는 변화 없다.
반대의 경우도 마찬가지이다.
3-2) 설명
1. 문자열을 받고 리스트형으로 변환한다.
->sentence=input()
or
->sentence=list(input())
2. sentence리스트 안에 들어있는 문자열이 몇갠지 계산한다. (소문자 -> 대문자)
계산 결과는 number리스트에 넣을 것이다. (26개는 A~Z까지의 수이다.)
number=[0]*26
for a in sentence:
index=ord(a.upper())-65 //아스키코드 A는 65이므로 -65를 해줘 A를 0부터 채워준다.
number[index]=number[index]+1
3. 가장 많은 수를 가진 대문자를 찾는다. (index를 0으로 만들어주고 재활용 해준다.)
max_index에는 가장 많은 수를 가진 대문자의 인덱스가 들어간다.
same은 가장 많은 수를 가진 대문자와 같은 수를 가진 대문자가 몇 개인지를 나타내준다.
index는 현재 검사중인 number의 인덱스를 나타낸다.
max_index=0
same=0
index=0
for b in number:
if b<number[max_index]:
index=index+1
continue
elif b>number[max_index]:
max_index=index
same=1
elif b==number[max_index]:
max_index=index
same=same+1
index=index+1
먼저, 가장 큰 갯수를 가진 대문자보다 작은 수를 가진 대문자는 다음 인덱스로 빠르게 이동시킨다.
만약 현재 가장 큰 개수를 가진 대문자보다 더 큰 개수가 있다면 max_index를 교체한 후 same을 1로 교체한다.(1로 교체하는 이유는 결과값 출력과 연관되어있다.)
만약 현재 가장 큰 개수를 가진 대문자와 같은 개수를 가진 대문자라면 same을 1 추가해준다.
최종적으로는 다음 인덱스로 이동하며, 26번을 검사한다.
4. 같은 개수를 가진 대문자가 1개 이상이면 "?"를 출력하고, 아니면 가장 많은 수를 가진 대문자를 출력한다.
if same>1:
print("?")
else:
print(chr(max_index+65))
4) c언어 코드
아직~
나태해지지 말자!
궁금한 점이 있다면 함께 고민해요!
끝!
'알고리즘 > 백준' 카테고리의 다른 글
2908번 상수 (0) | 2021.05.19 |
---|---|
1152번 단어의 개수 (0) | 2021.05.11 |
2675번 문자열 반복 (0) | 2021.04.26 |
10809번 알파벳 찾기 (0) | 2021.04.25 |
11720번 숫자의 합 (0) | 2021.04.18 |