꾸준히 합시다
백준 파이썬 1157번: 단어 공부 본문
문제 유형: 구현, 문자열
# Solution 1 - 정돈되기 전 소스 코드
a = input()
a = a.upper()
new = {}
for i in range(len(a)):
if a[i] in new:
new[a[i]] += 1
else:
new[a[i]] = 1
lst = list(new.values())
lst.sort(reverse=True)
if len(new) == 1:
print(a[0])
elif lst[0] == lst[1]:
print("?")
else:
for key, value in new.items():
if lst[0] == value:
print(key)
통과는 되었지만 보기에도 정돈이 안 되어있고 쓸모없는 변수를 너무 많이 지정해두었다. 부끄럽지만 count 함수를 몰랐기에 dictionary를 사용해 count 기능을 비슷하게라도 구현시켜 보려고 했다.
- 만약 new라는 dictionary에 알파벳이 들어있지 않다면 key로 추가해주고 value를 1로 지정한다
- 알파벳이 반복해서 등장할 때마다 value에 1을 더해준다. 만약 입력된 단어가 Mississippi라면 new에는 {'M': 1, 'I': 4, 'S': 4, 'P': 2} 로 저장되게 된다.
- 이 new dictionary의 value값만으로 이루어진 리스트를 만들어주고 sort()를 이용해 내림차순으로 정렬해준다.
- 이 리스트의 길이가 1이라면 한 가지 알파벳만이 등장했다고 간주, 바로 처음 입력 값의 맨 앞 글자 출력한다. (맨 앞글자일 필요는 없고 반복만 피하면 된다. 예: 입력값이 aa일 경우)
- 리스트의 길이가 1 이상이고 만약 가장 큰 수가 여러 개 있다면 바로 ?를 출력해준다.
- 그렇지 않다면 다시 new dictionary로 돌아가 해당 숫자를 value로 지니는 key값을 출력한다.
# Solution 2 - 최종 소스 코드
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))])
아래부터 각각 Solution 1과 Solution 2로 제출한 결과.
'코딩 테스트 문제 풀이' 카테고리의 다른 글
백준 파이썬 1032번: 명령 프롬프트 (0) | 2021.03.15 |
---|---|
백준 파이썬 18258번: 큐 2 (0) | 2021.03.11 |
백준 파이썬 9506번: 약수들의 합 (0) | 2021.03.10 |
백준 파이썬 9012번: 괄호 (0) | 2021.03.10 |
백준 파이썬 2884번: 알람 시계 (0) | 2021.03.09 |
Comments