알고리즘 풀이/백준

[백준 1157] 단어 공부

mhko411 2021. 1. 23. 22:55
728x90

문제

대소문자로 이루어진 영단어 중 가장 많이 나온 알파벳을 찾는다.

단, 대문자와 소문자를 구분하지 않는다.

 

입력

첫째 줄에 대소문자로 이루어진 문자가 입력된다.

 

출력

가장 많이 나온 문자의 대문자를 출력하고 동점이 발생했을 때는 ?를 출력한다.


1. 입력된 문자열 중에 알파벳의 개수를 담을 리스트를 선언한다.

2. for문을 통해 검사하여 문자를 ord()로 숫자로 변환하여 리스트에서 해당 인덱스의 수를 증가시킨다.

3. 리스트 내의 최댓값을 찾는다.

4. 최댓값이 2개이상이면 ?를 출력한다.

5. 그렇지 않다면 최댓값에 해당하는 문자의 대문자를 출력한다.

 

나의 풀이

test=input()

alphabet=[0 for _ in range(26)]

for c in test:
    if c.islower():
        alphabet[ord(c)-ord('a')]+=1
    else:
        alphabet[ord(c)-ord('A')]+=1

max_num=max(alphabet)
if alphabet.count(max_num)>=2:
    print('?')
else:
    for idx in range(len(alphabet)):
        if max_num==alphabet[idx]:
            print(chr(idx+ord('A')))
            break

 

다른사람의 풀이

- 문제에서 힌트를 찾아본다.

- 문제에서 대소문자를 구분하지 않고 대문자를 출력한다고 했기 때문에 입력된 문자열을 모두 대문자로 바꿔도 상관없다.

- 또한 set()을 활용하여 중복을 제거하여 리스트에 저장하고 리스트에 저장된 문자만 탐색한다. => set()을 생각했지만 해당 문자를 count()하여 저장하는 리스트의 인덱스와 문자가 들어있는 인덱스를 맞출 수 없다고 생각했음

 

※ 문제, 입력, 출력을 읽고 힌트가 될 것을 찾는 것이 중요하다. 그냥 주어지는 조건은 없다.

word=input().upper()
word_list=list(set(word))

cnt_list=[]
for i in word_list:
    cnt=word.count(i)
    cnt_list.append(cnt)

if cnt_list.count(max(cnt_list))>1:
    print('?')
else:
    index=cnt_list.index(max(cnt_list))
    print(word_list[index])

'알고리즘 풀이 > 백준' 카테고리의 다른 글

[백준 7568] 덩치 cpp-py  (0) 2021.01.26
[백준 2231] 분해합 cpp-py  (0) 2021.01.26
[백준 2309] 일곱 난쟁이  (0) 2021.01.26
[백준 2789] 블랙잭  (0) 2021.01.26
[백준 1152] 단어의 개수  (0) 2021.01.23