저번에 구해온 항해99 2주차 알고리즘 이미지를 토대로 링크를 작성했다.
오늘 풀어볼 문제는 바로
1. 셀프 넘버
함수 문제라고 하던데, 나는 함수를 어떻게 써야 할까 고민해보다가 일단은 내 꼴리는 대로 풀어보기로 했다.
아직 뒤로 14문제가 남았는데 6번째 문제부터 벌써 어떻게 접근해야 할까 고민되기 시작했다.
처음에는 숫자 1 부터 하나씩 앞의 수가 있는지 체크하는 방식으로 생각을 해봤는데, 도저히 떠오르는 방법이 없어서 아예 1부터 결과물을 리스트에 저장한 뒤, 숫자 1부터 비교해서 없는 값을 출력하면 되겠다고 생각했다.
have_number = [] # 셀프넘버가 아닌 값들
result = 0
for num in range(10000): # 셀프 넘버가 아닌 값들을 찾아보기
result = num
string_num = str(num)
for x in string_num:
result += int(x)
# 61 + 6 + 1 해서 68이 나왔다면 이 68이라는 수는 셀프 넘버가 아닐 것이다
have_number.append(result) # 셀프 넘버가 아닌 값들 저장
for num in range(10000):
# 1부터 10000까지 반복하며 have_number에 이 숫자가 있는지 체크
if num not in have_number:
print(num) # 없는 숫자만 출력
일단 이렇게 짜고 통과하긴 했는데 무식한 방법을 쓴 것 같아 약간 찜찜하다.
자료구조나 알고리즘에 대한 학습을 조금 해봐야 할 것 같다! (옛날에 공부 제대로 해보려다 재미없어서 때려쳤다)
나중에 공부하고 나서 좀 수정하는 과정을 거쳐야 겠다.
+ ) 함수를 어떻게 써야 할지 마지막까지도 떠오르지 않았다. 아 몰랑 통과만 하면 장땡이지
2. 단어 공부
위의 셀프 넘버보다는 어떻게 접근해야 할지 빠르게 답이 나왔다.
일단 가장 많은 문자를 찾는 것과, 가장 많은 문자가 여러개 일 경우 '?'표시를 하는 것이 관건이었다.
text = input().upper() # 대문자끼리 비교할 것이므로 모든 문자를 대문자로
count = {}
for x in text: # 모든 문자들의 개수를 계산해서 딕셔너리에 저장
if (x in count):
count[x] += 1
else:
count[x] = 1
best_key = ''
best_key_count = 0
for x in count:
# 저장된 문자들의 개수에서 가장 높은 값을 best_key, best_key_count에 저장함
if (best_key_count < count[x]):
best_key = x
best_key_count = count[x]
elif (best_key_count == count[x]):
# 현재 가장 많은 문자와 동일한 개수를 가진 문자가 있을 경우 문자를 '?'으로 변경
best_key = '?'
print(best_key)
시간적으로는 오래 안걸리긴 했는데 벌써부터 어지러우므로 오늘은 여기까지 하고 알고리즘 책을 한번 읽어보기로 했다.
알고리즘 책 내용은 내일 언급하도록 하겠다!
'Algorithm' 카테고리의 다른 글
알고리즘 문제 풀기 - 3 (0) | 2022.04.13 |
---|---|
알고리즘 문제 풀기 - 1 (0) | 2022.04.11 |