Home 백준 - 1157. 단어 공부 (MJ)
Post
Cancel

백준 - 1157. 단어 공부 (MJ)

# 1157. 단어 공부

백준브론즈1티어 문제이다.

📖Problems

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

예제 1

1
2
input : Mississipi
output :?

예제 3

1
2
input : z
output : Z

예제 2

1
2
input : zZa
output : Z

예제 4

1
2
input : baaa
output : A

🔍Institution

  • 문자열 문제
  • 반복되는 부분에 해당하는 인덱스에 값을 카운트하는 방식!

🔍Approach

🚩1차 시도

나는 파이썬의 문법을 활용하는 것이 아니라 자꾸 아스키코드(오래된 언어 접근 방법)으로 가려고 했다..

1
2
3
4
5
6
7
8
word = str(input())
alphabets = [0] * 26
for i in word:
    if i == chr(65+i):
        alphabets[i] += 1
    
answer = max(alphabets.index(alphabets))
print(chr(answer + 65))

Flow

  1. 문자열을 word에 입력받은 후, lower()를 이용해 모두 소문자로 바꿔준다.
  2. 문자열을 리스트로 변환해줄 변수 word_list를 만들고 set()함수를 이용해 중복을 제거한다.
  3. 문자가 얼마나 반복됐는지 보기 위해 count_list를 만들어 word_list에 있는 문자가 몇 번 반복되었는지 횟수를 count()를 이용해 저장한다.
  4. count_list에서 가장 큰 값이 2개 이상일 경우에 “?”를 출력한다.
  5. 그게 아니라 1개일 경우에는, count_list에서 가장 큰 숫자가 있는 인덱스 값을 word_list에 넣어준다. count_list에서 가장 큰 값이 있는 인덱스가 곧 word_list에 있는 인덱스와 같기 때문이다. 출력은 대문자로 해야 하므로, upper()를 이용해 출력한다.

🚩My submission

1
2
3
4
5
6
7
8
9
10
11
12
word = input().lower() # BAaa -> 'baaa'
word_list = list(set(word)) # ['b', 'a']
count_list = []

for i in word_list:
    count = word.count(i)
    count_list.append(count) # [1, 3]

if count_list.count(max(count_list)) >= 2:
    print("?")
else:
    print(word_list[count_list.index(max(count_list))].upper())

💡Retrospect

브론즈도 쉽지 않다

이 문제를 통해 문자열과 관련된 함수를 알게 되었다. 아스키코드로 생각하는 건 그만!!!!

잘 모르겠을 땐 점프 투 파이썬에서 쭉 파악한 다음에 문제에 접근하자!

  • set : set()자료형은 순서가 없다. 따라서 set은 중복을 제거하기 위한 필터역할로 쓰인다.
  • count : 리스트에 포함된 요소 x의 개수 세기

    1
    2
    3
    4
    5
    6
    7
    
      a = hobby
      a.count('b')
      >> 2
        
      b = [1,2,3,1]
      b.count(1)
      >> 2
    
  • index : 위치 반환

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
      #리스트에 x값이 있으면 x의 위치 값을 돌려준다.
      a = [1, 2, 3]
      a.index(3)
      # >> 2
      a.index(1)
      # >> 0
        
      # 문자열은 문자열 중 문자 t가 맨 처음으로 나온 위치를 반환한다.
      a = "Life is too short"
      a.index('t')
      >> 8
    
This post is licensed under CC BY 4.0 by the author.

백준 - 1956. 운동

백준 - 2929. 음계, 2675. 문자열반복 (MJ)