[BOJ] 1157 단어 공부
이 문제는 스스로 힘으로 해결하지 못했다. 출력값은 잘 나오는데, 시간초과였다. 시간 복잡도를 고려하지 않아서 생긴 문제이기에 어떻게든 줄여보려고 했으나 잘 안 되었다. 다수의 풀이를 참고한 결과 문자열, list를 다루는 데에 필요한 메서드에 대한 학습이 필요했다.
이에 따라 count
와 index
메서드를 학습했다.
list.count()
count 힘수는 문자열, 리스트에서 특정 문자(요소)가 몇 개 있는지 반환해준다.
word = "MISSISSIPI"
print(word.count("S")) # 4
list.index()
index 함수는 문자열, 리스트에서 값의 위치를 찾아주는 함수이며, 중복된 값이 있으면 가장 최소의 위치를 리턴한다. 함수 인자로 전달한 값의 인덱스를 반환한다.
array = [4, 3, 1, 2, 5]
print(array.index(1)) # 2
index(value, start, end)
로 원하는 범위 내에서 search 할 수도 있다.
나의 풀이 - 시간초과
#입력
#대소문자 구분이 없기 때문에 전체를 Upper로 맞춰줌
import sys
input = sys.stdin.readline
word = input().rstrip().upper()
counts = []
for i in range(len(word)):
count =0
for j in range(len(word)):
if(word[i] == word[j]):
count += 1
counts.append((count, word[i]))
top = max(counts)
result=[]
counts = list(set(counts))
for i in range(len(counts)):
if counts[i][0] >= top[0]:
result.append(counts[i][1])
if(len(result)>1):
print("?")
else:
print(result[0])
다른 풀이
#입력
#대소문자 구분이 없기 때문에 전체를 Upper로 맞춰줌
import sys
input = sys.stdin.readline
word = input().rstrip().upper()
char = list(set(word))
counts = []
for i in char:
count = word.count(i)
counts.append(count)
if counts.count(max(counts)) > 1:
print("?")
else:
print(char[counts.index(max(counts))])