인덱스 응용 문제풀기 (백준)

gyeorrr·2023년 4월 17일
0

문제

알파벳으로 된 단어중 가장 많이 쓰여진 알파벳을 대문자로 표현하기

  • 알파벳 대문자로 표현할 것 (대문자와 소문자가 인식되는 게 구별되어서 통일화시키기)
  • 만일, 가장 많이 사용된 알파벳이 여러개 존재 하는 경우엔 "?" 출력

보기

Mississipi -> ?
zZa           -> Z
z               -> Z
baaa        -> A

생각해보기

  1. 소문자와 대문자가 구별되니까 우선 동일화
  2. 알파벳 갯수를 세어줄 명령어 찾아보기
  3. 조건식이 성립 될 수 있도록 코드짜기

input 값 = "aAabbc"

list1 = input().upper()
words = list(set(list1))
listnum = []

for i in words:
	cnt = list1.count(i)
    listnum.append(cnt)

if listnum.count(max(listnum)) > 1 :
	result = "?"
else :
	maxindex = listnum.index(max(listnum))
    result = words[maxindex]

print(result)

>>> A

코드해석

list1 = input().upper) 받을 단어를 전부 대문자로 바꾼다
words = list(set(list1)) 중복알파뱃을 없애고, count를 쓰기 위해 만들어둔 list
listnum = [] 알파벳의 갯수를 담을 공간

for i in words: words에 있을 갯수만큼 반복하며 i는 A,B,C
cnt = list.count(i) list1의 알파벳 갯수를 셀건데 대상은 words(i)
listnum.append(cnt) listnum에 구해진 cnt를 담는다

if listnum.count(max(listnum)) > 1: result = "?" 만일 listnum에 담긴 값중 최댓값이 1보다 크다면 result = "?"
else : maxindex = listnum.index(max(listnum)) 아니라면 listnum에 있는 값의 가장 큰 값의 인덱스를 구하고,
result = words[maxindex] result 는 words의 인덱스

중요하게 생각 된 점

words변수에서 쓰인 list(set("변수명"))를 쓰게 되면, 중복값을 제외한 list형식을 변수에 담아주는 것

for i in words: i의 값은 A,B,C 이 나오지만, 반복횟수는 세번이다 len이나 range에 너무 구애받지 말자

if listnum.count(max(listnum)) >1 중복값을 어떻게 걸러낼지 생각을 길게 하였는데, 이러한 방법이 있었다. 생각을 좀 더 논리적으로 다가가는습관을 길러보자

알고리즘 문제를 풀면서 각 함수의 응용이 정말 중요하다는 것을 깨달았다.

0개의 댓글