문제 출처: https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
1. 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
word = input().upper() #입력 값을 모두 대문자로
word_list = list(set(word)) # set: 자료형의 중복을 제거
cnt =[] #알파벳 저장
for i in word_list:
num = word.count(i) #각 알파벳의 갯수를 센다.
cnt.append(num) #리스트에 알파벳 갯수를 넣어준다.
if cnt.count(max(cnt)) >=2: #cnt 값이 겹치면
print("?")
else:
Max_index = cnt.index(max(cnt)) #cnt 숫자 최대값의 위치
print(word_list[Max_index])
|
cs |
2. 해결과정
알파벳을 입력받고 upper()을 이용하여 입력 받은 값을 모두 대문자로 변경해준다.
set 자료형을 이용하기 위해서 우선 리스트로 변환을 해주고, set을 이용하면 중복을 제거할 수 있다.
즉, 처음에 mississipi가 들어왔으면 word_list에는 ['m','i','s','p']만 남게 되는 것이다.
cnt는 빈 리스트로 설정해 놓고 알파벳의 갯수를 저장해 줄 것이다.
word_list 안에 있는 각각의 문자들을 for문을 통해 반복을 해준다. num변수는 중복을 제거하기 전에 word에 각각의 문자가 몇 개 있었는지 체크해주는 용도이고, count()를 이용해서 셀 수 있다.
cnt 리스트에 위에서 센 알파벳의 갯수를 넣어주면 된다.
따라서 cnt =[4,4,1,1]이다.
if문을 사용해서 cnt 리스트에 가장 큰 값 max(cnt)를 count()를 이용해서 세고, 만약에 그 수가 2 이상이면 최대의 알파벳 갯수가 중복 된것을 의미 하기 때문에 ?를 출력해준다. 그게 아니라면
예를 들어 word = aba라고 하면 word_list=['a','b'] cnt=[2,1] 위의 코드에서 max(cnt)는 2가 되고, index(2)는 cnt에서는 cnt[0]에 위치하기 때문에, word_list[0]은 a를 가리키게 된다.
3. 느낀점
생각보다 문자열을 입력받는 것 부터 까다로웠던 문제였다. 대문자로 변경해주는 것이 upper()라는 것을 새로 알게 되었고, count()를 이용하면 문자의 갯수를 셀수 있다는 점, set()을 이용하면 문자열의 중복을 제거할 수 있다는 점도 새롭게 알게 되어 좋다.
'공부 자료 > 알고리즘' 카테고리의 다른 글
(Python/파이썬) 백준 1316번 - 그룹 단어 체커 (0) | 2021.07.30 |
---|---|
(Python/파이썬) 백준 2941번 - 크로아티아 알파벳 (0) | 2021.07.30 |
(Python/파이썬) 백준 10870번 - 피보나치 수 5 (0) | 2021.07.30 |
(Python/파이썬) 백준 2675번 - 문자열 반복 (0) | 2021.07.30 |
(Python/파이썬) 백준 11050번 - 이항 계수 1 (0) | 2021.07.30 |