BOJ

BOJ 1157 단어공부 파이썬

이도울 2022. 1. 12. 19:50
SMALL

1) 문제 링크

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

2) 문제 접근

 

가장 많이 사용된 알파벳을 대소문자 구분 없이 알아내야하기 때문에 우선 입력된 문자들을 모두 대문자 혹은 소문자로 만들어서 빈도 수를 확인하면 되지 않을까? 만약 빈도 수가 높은 알파벳이 여러개라면 ?을 출력하면 된다. 그러면 중복 검사를 하는 조건 문도 필요할 것 같다.

 

우선, 입력값을 받은 후에 모든 문자를 대문자로 만든다. 대문자로 만드는 이유는 나중에 예제 출력에서 나오는 문자열이 모두 대문자이기에... 그 뒤에, set 함수를 사용하여 리스트에 중복값을 제거하고 다시 리스트의 형태로 만들어준다.

words = input().upper() # 알파벳을 대문자로 만든다.

# set 함수는 리스트에 중복된 요소를 삭제하는 기능이 있다.
# set을 사용해 중복 값을 제거하고 다시 리스트 형태로 변환해준다.
word_types = list(set(words))
cnt_list = []

# 입력 값 안에 모든 알파벳의 종류를 반복문을 돌려가며 입력 값의 개수와 비교한 뒤,
# count된 숫자를 list에 추가한다.

for x in word_types :
    cnt = words.count(x)
    cnt_list.append(cnt)

입력받은 문자열에 같은 알파벳이 몇 개 있는지 숫자를 카운트해서 cnt_list 리스트에 추가한다. 이 리스트에서의 숫자의 순서는 word_types 리스트의 원소의 순서와 동일하다.

 

# 우선, 조건문을 활용하여 같은 빈도 수가 있는 알파벳이 있다면 "?"을 출력한다.
if cnt_list.count(max(cnt_list)) >= 2 :
    print('?')
else :
    max_index = cnt_list.index(max(cnt_list))
    print(word_types[max_index])

 

 

만약 빈도수가 적혀 있는 배열에서 최대값의 숫자가 2 이상이라면, 그 말은 즉슨, 최대인 빈도 수가 중복된다는 의미이므로, 물음표를 출력한다. 그것이 아니라면, 입력 값에서 최대 빈도수를 지닌 카운트의 인덱스의 위치를 확인하고, 그 위치와 동일한 문자를 출력한다.

LIST

'BOJ' 카테고리의 다른 글

BOJ 17608번 막대기  (0) 2022.01.13
백준 2884번 알람시계 파이썬  (0) 2022.01.13
BOJ 1110번 더하기 사이클 파이썬  (0) 2022.01.12
BOJ 11399번 ATM  (0) 2022.01.01
BOJ 2839번 문제 설탕배달 코드 (파이썬)  (0) 2022.01.01