Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- chatGPT
- 알고리즘기초
- NoSQL
- httpCode
- 소수
- 탐색알고리즘
- 마크다운
- 수학
- 몽고DB
- db
- 코딩테스트
- database
- Python
- 기초
- 데이터
- 데이터베이스
- Markdown
- 코딩문제
- 인프콘2024
- 그리디
- 알고리즘
- 코테
- mongoDB
- 파이썬
- 수열
- 마크다운문법
- Algorithm
- 백준
- 그리디알고리즘
- 그래프
Archives
- Today
- Total
Dev_from the Bottom
#37. Algorithm27_python) 단어 공부_백준 1157 본문
문제) 단어공부
- 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력)
- 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력)
- 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
문제 링크) https://www.acmicpc.net/problem/1157
Step1) 테스트1 : upper( ). set( ), list( )
word = 'zZabBcC'
word = word.upper() # 최종 출력이 대문자
print(word)
print(set(word)) # set()으로 중복 제거
print(list(set(word))) # 중복 제거 집합을 리스트로 변환
>>>
ZZABBCC
{'C', 'Z', 'B', 'A'}
['C', 'Z', 'B', 'A']
Step2) 테스트2 : 테스트1 정리 + character count
word = 'zZabBcCzZaBCpb'
word = word.upper()
unique_char = list(set(word))
print(unique_char)
print()
for i in unique_char:
print(i) # 알파벳
cnt = word.count(i) # word라는 문자열에 알파벳 i의 갯수
print(cnt)
print()
>>>
['Z', 'A', 'P', 'C', 'B']
Z
4
A
2
P
1
C
3
B
4
Step3) 테스트3 : 테스트2 결과 리스트화
word = 'zZabBcCzZaBCpb'
word = word.upper()
unique_char = list(set(word))
cnt_list = [] # 알파벳 갯수 담을 리스트
print(unique_char )
for i in unique_char:
cnt = word.count(i)
cnt_list.append(cnt)
cnt_list
>>>
['P', 'B', 'A', 'C', 'Z']
[1, 4, 2, 3, 4]
Step4) 테스트4 : max( ), count( )
word = 'zZabBcCzZaBCpb'
word = word.upper()
unique_char = list(set(word))
print(unique_char)
cnt_list = []
for i in unique_char:
cnt = word.count(i)
cnt_list.append(cnt)
print(cnt_list)
print(max(cnt_list)) # cnt_list에서 최대값 : 4
cnt_list.count(4) # cnt_list에서 4인 값의 갯수 : 2
>>>
['P', 'B', 'A', 'C', 'Z']
[1, 4, 2, 3, 4]
4
2
Step5) 로직 완성
word = 'zZabBcCzZaBCpb'
word = word.upper()
unique_char = list(set(word))
cnt_list = []
for i in unique_char:
cnt = word.count(i)
cnt_list.append(cnt)
# 출력 로직
if cnt_list.count(max(cnt_list)) > 1: # 최대값의 갯수가 1보다 크다면 : 가장 많이 사용된 알파벳이 여러개
print('?')
else:
max_index = cnt_list.index(max(cnt_list)) # 최대값의 리스트 추출
print(unique_char[max_index]) # 값 추출
>>>
?
Step6) 완성
word = input()
word = word.upper()
unique_char = list(set(word))
# print(unique_char)
cnt_list = []
for i in unique_char:
cnt = word.count(i)
# print(cnt)
cnt_list.append(cnt)
if cnt_list.count(max(cnt_list)) > 1:
print('?')
else:
max_index = cnt_list.index(max(cnt_list))
print(unique_char[max_index])
>>>
Mississipi
?
>>>
baaa
A
# 배운 점
- upper(), count(), index() 메서드
- set 활용해야 하는 경우 : 중복 제거
# 소회
- 아스키 코드로 풀어야 할 줄 알았는데 아니었음
- 기본적으로 워드 카운트 로직과 유사
- 문자열, 인덱스, 카운트 등을 종합적으로 활용해야 함
- 문제가 조금 복잡해지니, 어디서부터 사고를 해야할지 헤맴 -> 꾸준한 연습 필요!
'Algorithm_study' 카테고리의 다른 글
#39. Algorithm29_python) 크로아티아 알파벳_백준 2941 (0) | 2022.06.11 |
---|---|
#38. Algorithm28_python) 상근이의 여행_백준 9372 (0) | 2022.06.10 |
#36. Algorithm26_python) 백대열_백준 14490 (0) | 2022.06.09 |
#35. Algorithm25_python) 다이얼_백준 5622 (0) | 2022.06.09 |
#34. Algorithm24_python) 상수_백준 2908 (0) | 2022.06.04 |
Comments