지나가던 개발자

[Python] 백준 1157번(단어 공부) 문제 풀이 본문

PS/Python

[Python] 백준 1157번(단어 공부) 문제 풀이

KwonYongHyeon 2022. 1. 6. 14:47

 

 보자마자 이건 굉장히 쉬운 문제라며 자만했다.

 

a = list(input().upper())
p = []
q = 0
for i in range(len(a)):
    n = 0
    for j in range(len(a)):
        if a[j] == a[i]:
            n += 1
    if n == q:
        q = n
        p.append(a[i])
    elif n > q:
        q = n
        p = []
        p.append(a[i])

if len(set(p)) != 1:
    print("?")
else:
    print("".join(set(p)))

 

 리스트 내 가장 많은 요소를 찾는 알고리즘을 직접 만들어 보았다. 

 

이렇게 코드를 짜고 백준에 제출해 보았더니,

 

 

 시간 초과가 떴다. ㅠㅠ.

 

def solution(a):
    answer = a[0]
    for i in range(len(a)):
        if a[i] == answer:
            continue
        elif a.count(a[i]) > a.count(answer):
            answer = a[i]
        elif a.count(a[i]) == a.count(answer):
            return "?"
    return answer

print(solution(list(input().upper())))

 

 그래서 이번에는 count() 함수를 사용해 이렇게 짜보았다.

 

 

 ..? 도대체 뭘까.

 

 그래서 이번에는 구글링을 좀 해서 이 블로그를 참고해 코드를 짜봤다.

 

 가장 많은 요소를 찾는 데에는 "max(set(data), key=data.count)"라는 엄청난 방법을 쓸 수 있는 것이었다...! 가슴이 웅장해진다.

 

 그래서 이번에는 이렇게 코드를 짜 보았다.

 

def solution(a):
    answer = max(set(a), key=a.count)
    for i in range(len(a)):
        if a[i] == answer:
            continue
        if a.count(a[i]) == a.count(answer):
            return "?"
    return answer

print(solution(list(input().upper())))

 

 그리고 백준에 제출해보니...

 

 

 ... 도대체 어쩌잔걸까 ...

 

 삽질을 계속 하다가, 결국 다른 사람의 코드를 가져오기로 했다. 이 블로그의 코드를 가져왔다.

 

a = input().upper()
word = list(set(a))
new = []

for i in word:
    count = a.count(i)
    new.append(count)
                    
if new.count(max(new)) >= 2:
    print("?")
else:
    print(word[new.index(max(new))])

 

 아...! 나는 이 생각을 왜 못했을까.

 

 우선 a를 입력받은 뒤에 그 내용을 다 대문자로 바꾸어 준다. 그 뒤 중복 요소를 삭제한다. 그리고 a의 요소 개수를 세 준 뒤, 만약 a의 요소 중 가장 많은 요소를 세어 그게 2개 이상이면 ?을 프린트하고, 가장 많은 요소를 출력한다.

 

 예를 들자. Mississipi를 입력받았다고 할 때, 2번 줄을 거치며 ['S', 'I', 'M', 'P']가 되고, 반복문을 거치며 [4, 4, 1, 1]이 된다.

 

 이번에는 baaa를 입력받으면, 2번 줄을 거치며 ['B', 'A']가, 반복문을 거치며 [1, 3]이 된다.

 

 

 아직 갈 길이 먼 개발자입니다...

Comments