공부 자료/알고리즘

(Python/파이썬) 백준 1157번 - 단어 공부

뚜루뚜루세니 2021. 7. 30. 12:22
728x90

문제 출처: 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()을 이용하면 문자열의 중복을 제거할 수 있다는 점도 새롭게 알게 되어 좋다.

728x90