본문 바로가기

Python(알고리즘,문제풀이)/BOJ (Bronze V)

1157번 / 단어공부

728x90

📚문제

출처 : 백준 / 1157번 (https://www.acmicpc.net/problem/1157)

📝풀이

# 1157번 단어공부
word = input().lower() # mississipi
word_uniq = list(set(word)) # m,i,s,p
freq = [] 
for i in word_uniq:
    freq.append(word.count(i)) # [1,4,4,1]
if freq.count(max(freq))>=2:
    print('?')
else:
    print(word_uniq[freq.index(max(freq))].upper())

 

📌막힌 부분

 

1. 문제

=> 대/소문자 구분이 없는 것

zZa에서 z의 개수와 Z의 개수 셀 때 

word = 'zZa'

for i in word:	
    word.count(i) + word.count(i.upper())

이런식으로 처음에는 복잡하게 소문자와 대문자의 개수를 각각 세서 합치는 것을 생각했는데

대문자가 올 경우에
앞의 코드(word.count(i))에서도 'Z'를 count 하고 
뒤의코드(word.count(i.upper()))에서도 해준 'Z'를 세기 때문에 원하는 값이 나오지 않음

 

1. 해결

=> 값을 입력 받을 때 우선 다 소문자로 만들어준 다음에 마지막에 출력만 .upper()로 해주기


2. 문제

=> 알파벳 빈도수 셀 때 같은 알파밧에 대해서 중복된 값이 나오는 것

ex) count('i')를 하게 되면 Mississipi에서 두 번째 i도 4로 출력하고 5번째 i도 4로 출력

 

2. 해결

=> 단어를 중복제거하여 uniq한 알파벳만 남기기 (m,i,s,p)

list(set(mississipi)) # set 함수는 중복의 제거 기능을함.

3. 문제 

=> index()함수의 기능을 가끔 헷갈림

 

3. 해결

=> 어떤 문자나 리스트에서 ()안에 문자열 혹은 숫자가 어느 위치에 있는지 인덱스로 출력

x = ['A', 'B', 'C']
x.index('A')
---------------------
0

 

한참 보고 생각해보다가 안 되서 구글링해서 참고 

브론즈 1만되도 어렵다...

728x90