지나가던 개발자
[Python] 백준 1157번(단어 공부) 문제 풀이 본문
보자마자 이건 굉장히 쉬운 문제라며 자만했다.
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]이 된다.
아직 갈 길이 먼 개발자입니다...
'PS > Python' 카테고리의 다른 글
[Python] 백준 1934번(최소공배수) 문제 풀이 (0) | 2022.01.08 |
---|---|
[Python] 백준 14920번(3n+1 수열) 문제 풀이 (0) | 2022.01.08 |
[Python] 백준 1152번(단어의 개수) 문제 풀이 (0) | 2022.01.06 |
[Python] 백준 1008번(A/B) 문제 풀이 (0) | 2022.01.06 |
[Python] 백준 2480번(주사위 세개) 문제 풀이 (0) | 2022.01.04 |