문제 바로가기
두 가지 방식으로 풀어보았다.
1번 방식으로 푸니 시간이 절반 이상 절약되었다.
1번 풀이
접근방식
- 주어진 문장 내에 사용된 알파벳들만 for문을 돌려 사용 횟수를 계산한다.
- 사용 횟수를 기준으로 내림차순 정렬한 뒤 0번째 인덱스와 1번째 인덱스를 비교하여 가장 많이 사용한 횟수가 2개 이상으로 확인되는 경우는 물음표를 출력하도록 한다.
word = str(input()).upper()
frequency_of_use = []
for char in set(word): #단어 내 중복을 없애고 사용된 알파벳만 추립니다.
frequency = word.count(char) #해당 알파벳이 단어 안에서 몇 번 쓰였는 지 계산합니다.
frequency_of_use.append([frequency,char])
frequency_of_use.sort(reverse=True)
if len(frequency_of_use) > 1 and frequency_of_use[0][0] == frequency_of_use[1][0]:
print('?')
else:
print(frequency_of_use[0][1])
코드풀이 및 사용개념
- 반복문의 반복 횟수를 줄이기 위해 단어 내 사용된 알파벳만을 이용하여 for문을 돌린다. set()함수를 이용하여 집합 자료형으로 만들어 주었다. 집합 자료형은 중복을 허용하지 않아 자료형 전환 과정에서 중복이 모두 제거된다.
- 문제 요건으로 최빈값이 여러 개인 경우 물음표를 출력하라고 주어졌다.
- 정렬된 리스트의 0번째 인덱스와 1번째 인덱스의 횟수를 비교해주는 if문을 작성했다.
- 하나의 알파벳만 사용한 단어는 1번째 인덱스가 존재하지 않아 Index error가 발생할 수 있다. 이를 방지하기 위해 리스트의 길이가 1을 초과한다는 조건을 추가했다.
- 위의 경우를 제외하고 나머지의 경우는 가장 많이 사용한 알파벳을 출력하도록 한다.
2번 풀이
접근 방식
- 알파벳과 발생횟수를 key:value형태로 저장한 뒤 value값을 기준으로 내림차순 정렬한다.
- 정렬된 배열에서 발생횟수가 동일한 알파벳이 있는 지 확인하여 있다면 물음표를, 없다면 알파벳 대문자를 출력한다.
- 반복횟수와 해당 알파벳을 frequency_of_use 리스트에 쌍으로 저장해준다. 반복횟수가 앞에 앞에 위치하는 이유는 정렬 시 key값을 지정해주는 과정을 생략하기 위해서이다.
정답코드
word = str(input()).upper()
count = {}
for char in word:
if char in count:
count[char] += 1
else :
count[char] = 1
sorted_count = sorted(count.items(), key = lambda x:x[1], reverse =True)
if len(sorted_count) > 1 :
if sorted_count[0][1] == sorted_count[1][1]:
print('?')
else :
print(sorted_count[0][0])
else :
print(sorted_count[0][0])
# else문을 한 번만 적었더니 sorted_count 리스트에 값이 3개 이상일 때 값이 나오지 않는 에러가 발생했다.
코드풀이 및 사용개념
1. 입력 및 딕셔너리 생성
- 문제 조건에 따라 입력받은 값을 대문자로 변환한다. upper()함수를 이용하였다.
2. 알파벳 반복횟수 체크
- 단어를 알파벳별로 나누어 for문을 돌린다.
- count라는 딕셔너리안에 해당 알파벳이 존재하면 value값을 1씩 증가시킨다.
- sorted(count.items(), key = lambda x:x[1], reverse = True)를 이용하여 value값이 큰 순서대로 정렬하였다. 정렬을 한 이유는 최빈값 중복여부를 체크하기 위해서이다.
3. 최빈값 중복여부 체크 및 출력
- 최빈값을 가진 알파벳이 중복될 경우 물음표를 표시하라는 것이 문제의 조건이다. 딕셔너리 값 내에서 중복여부를 찾아내는 방식을 고민하다가 value를 기준으로 내림차순으로 정렬 후 인덱스 0과 1에 해당하는 value값이 중복되는 지를 비교하는 방식으로 코드를 작성했다.