백준 1157번 파이썬

몽뭉뭉·2023년 12월 22일
0

백준 코딩테스트

목록 보기
3/5

아예 감도 못잡아서 바로 풀이로 들어간다

업로드중..

[풀이]

word = input().upper()  # 입력받은 문자열을 대문자로 변환
alphabet_count = {}

# 알파벳별 빈도 수 계산
for char in word:
    if char in alphabet_count:
        alphabet_count[char] += 1
    else:
        alphabet_count[char] = 1

# 가장 많이 사용된 알파벳 찾기
max_count = max(alphabet_count.values())
most_common = [k for k, v in alphabet_count.items() if v == max_count]

# 가장 많이 사용된 알파벳이 여러 개인 경우 '?' 출력
if len(most_common) > 1:
    print('?')
else:
    print(most_common[0])  # 가장 많이 사용된 알파벳 출력

깨달은 점
1. 딕셔너리가 key value로 이루어졌다는 정도만 알 뿐 응용을 해본적이 없다. 딕셔너리에 친숙해지자
2. alphabet_count[char]처럼 딕셔너리 변수 명에 [key이름]을 하면 key 값이 추가된다
3. items에 대해 몰랐다. item은 딕셔너리에서 key, value를 반환해주는 함수이다

꼭 다시풀어보자!

=> chat gpt 코드였는데 런타임 오류가 발생한다

[런타임 오류난 내 수정 코드]

if sorted(cnt_list)[-1]==sorted(cnt_list)[-2]:
    print('?')
else:
    print(alphabet[cnt_list.index(max(cnt_list))])

테스트 해보기 sorted()라는 함수의 메모리 할당량이 높은 것 같다 사용을 자제하자

[다른블로그코드]

words = input().upper()
unique_words = list(set(words))  # 입력받은 문자열에서 중복값을 제거

cnt_list = []
for x in unique_words :
    cnt = words.count(x)
    cnt_list.append(cnt)  # count 숫자를 리스트에 append

if cnt_list.count(max(cnt_list)) > 1 :  # count 숫자 최대값이 중복되면
    print('?')
else :
    max_index = cnt_list.index(max(cnt_list))  # count 숫자 최대값 인덱스(위치)
    print(unique_words[max_index])

논리
1. word를 구성한 알파벳들의 list를 만든다
2. 알파벳 list 안에 있는 알파벳이 있으면 그 수를 센다
3. 만약 그 수가 중복되면 ?
아니면 최대값의 인덱스를 통해 출력한다

[몰랐던점]
cnt_list.index(max(cnt_list))같은 .index 사용법을 몰랐음
words.count(x)같은 .count() 사용법을 몰랐음


기초가 부족하다.... ㅠ

0개의 댓글