[BOJ] 1157 단어 공부

[BOJ] 1157 단어 공부

문제 링크

이 문제는 스스로 힘으로 해결하지 못했다. 출력값은 잘 나오는데, 시간초과였다. 시간 복잡도를 고려하지 않아서 생긴 문제이기에 어떻게든 줄여보려고 했으나 잘 안 되었다. 다수의 풀이를 참고한 결과 문자열, list를 다루는 데에 필요한 메서드에 대한 학습이 필요했다.

이에 따라 countindex 메서드를 학습했다.

  1. list.count()

count 힘수는 문자열, 리스트에서 특정 문자(요소)가 몇 개 있는지 반환해준다.

word = "MISSISSIPI"
print(word.count("S")) # 4
  1. 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))])

© 2021. All rights reserved.