냥코센세이
[백준] 1157번 단어 공부(파이썬) 본문
그래두 아직은 알고리즘 단계로 안 들어가서 그런지 1시간이면 풀린다...
시간 좀 줄일 순 없나
열심히 해야지,,,,
이번에는 단계별로 풀어보기 문자열의 단어 공부를 풀어보았다.
알파벳으로 된 단어가 주어졌을 때, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하는 것이다.
단, 가장 많이 사용된 알파벳이 여러 개 존재할 경우 ?로 출력한다.
여기서 내가 제일 먼저 한 것은 우선 단어 입력받기 -> 소문자로 변환하기다.
word = input()
word = word.lower()
그리고 빈 딕셔너리와 카운트 변수를 생성해주었다.
dic = {}
count = 0
진짜 구글링만 엄청나게 하는 것 같아 현타가 오긴 한데,,,휴,,,
처음엔 딕셔너리를 사용해야 하는 줄 몰랐다. 따지고 보니 알파벳의 개수를 저장할 공간이 필요했는데
그걸 딕셔너리가 깔끔하게 해결해 주더라.
이제 본격적으로 코드를 만들어 보자.
우선 입력된 단어를 for문을 통해 하나씩 불러오고, 딕셔너리에 하나씩 넣어줘야 한다.
그건 if문을 통해 이미 존재할 경우에는 +1을, 새로 추가해야 할 경우에는 1을 저장해준다.
for i in word: #단어를 하나씩 불러온다.
if i in dic: #만약 dic안에 단어가 이미 존재한다면
dic[i] += 1
else: #새로운 단어라면
dic[i] = 1
여기까지 완료했으면 입력된 단어가 각각의 개수대로 딕셔너리에 잘 들어갔다.
이제 해줘야 하는 것은 최댓값을 찾은 뒤 그 키를 출력해 주는 것.
우선 최댓값을 찾아주자.
max를 통해 딕셔너리의 값 중 최댓값을 찾아 변수에 저장해주었다.
m = max(dic.values()) #입력된 dic의 값중에서 max를 찾아 변수에 저장한다.
그다음, 최댓값이 중복될 경우를 만들어 줘야 하니
for문에서 딕셔너리 값을 불러온 다음 최댓값과 딕셔너리 값이 같을 경우, count값을 1씩 증가시켜 준다.
for j in dic.values(): #딕셔너리의 값을 불러온다.
if m == j: #최대값과 같은 값이 있을 경우
count += 1
이제 마지막이다.
만약 최댓값이 2개 이상 있을 경우에는 ?을 출력해 주고,
그러지 않을 경우엔,,,,,,,
여기서 좀 시간이 많이 소요됐다.ㅠㅠ
키를 통해 값을 출력하는 건 쉬운데, 값을 통해 키를 출력하는 게 번거로웠다.
구글링을 통해 알아낸 결과, 리스트 함축을 통해 키 값을 받아 내고 이때 최댓값이 value에 있을 때 이때의 key를 result에 저장해주었다.
원래 리스트까지 쓸 생각은 없었는데 이 함축을 할 때 리스트 말고는 다 주소 값으로 출력돼서 어쩔 수 없이 리스트를 사용해주었다.
번거롭지만,,, join을 통해 리스트 문을 보기 편하게 보여주고 다 대문자로 바꿔주었다.
if count >= 2: #최대값이 2개 이상 있을 경우
print('?')
else: #최대값이 1개일 경우
result = [k for k,v in dic.items() if v == m] #값이 최대값인 경우 키를 불러온다. 이때 리스트로 저장.
print(''.join(result).upper()) #join을 통해 합쳐주고 대문자로 표기
전체 코드 문은!!
word = input()
word = word.lower()
dic = {}
count = 0
for i in word: #단어를 하나씩 불러온다.
if i in dic: #만약 dic안에 단어가 이미 존재한다면
dic[i] += 1
else: #새로운 단어라면
dic[i] = 1
m = max(dic.values()) #입력된 dic의 값중에서 max를 찾아 변수에 저장한다.
for j in dic.values(): #딕셔너리의 값을 불러온다.
if m == j: #최대값과 같은 값이 있을 경우
count += 1
if count >= 2: #최대값이 2개 이상 있을 경우
print('?')
else: #최대값이 1개일 경우
result = [k for k,v in dic.items() if v == m] #값이 최대값인 경우 키를 불러온다. 이때 리스트로 저장.
print(''.join(result).upper()) #join을 통해 합쳐주고 대문자로 표기
짜잔,,,
코드 왤케 길어,,,
진짜 짱나
나도 내 코드 지저분한데 다른 사람이 이 코드 보면 얼마나 한심할까,,,,ㅋㅋㅋ큐ㅠㅠ큐ㅠㅠㅠㅠㅠ
참고하지 마세요,,,,도움 안될 거엥휴ㅠㅠ
'백준 > 단계별로 풀어보기' 카테고리의 다른 글
[백준] 2941번 크로아티아 알파벳(파이썬) (0) | 2022.08.26 |
---|---|
[백준] 1193번 분수 찾기(파이썬) (0) | 2022.08.22 |
[백준] 1297번 TV 크기(파이썬) (0) | 2022.08.15 |
[백준] 10809 알파벳 찾기(파이썬) (0) | 2022.08.11 |
[백준] 11720 숫자의 합(파이썬) (0) | 2022.08.11 |