3번
두 수를 Input으로 받아 합을 구하는 코드의 오류를 해결한다.
# 오류 코드
numbers = input().split()
print(sum(numbers))
# 오류 해결 코드
numbers = map(int,input().split())
print(sum(numbers))
numbers 변수를 map으로 묶어 int로 변환해준다.
4번
문자열을 입력받아 단어별로 나누는 코드의 오류를 해결한다.
# 오류 코드
words = list(map(int, input().split()))
print(words)
# 해결 코드
words = list(map(str, input().split()))
print(words)
문자열을 입력받아야 하기 때문에 int가 아닌 str로 바꿔준다.
5번
숫자의 길이를 구하는 코드의 오류를 해결한다.
# 오류 코드
number = 22020718
print(len(number))
# 해결 코드
number = '22020718' # 문자열로 바꿔준다.
print(len(number))
number의 값을 문자열로 받을 수 있도록 ''를 추가한다.
6번
1부터 N까지의 2의 곱 저장하는 코드의 오류를 해결한다.
# 오류 코드
N = 10
answer = ()
for number in range(N + 1):
answer.append(number * 2)
print(answer)
# 해결 코드
N = 10
answer = []
for number in range(N + 1):
answer.append(number * 2)
print(answer)
answer에서 소괄호()로 이루어진 튜플은 수정을 할 수 없다.
append로 값을 추가하기 위해 대괄호[]로 리스트를 만든다.
7번
평균을 구하는 코드의 오류를 해결한다.
# 오류 코드
number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
total = 0
count = 0
for number in number_list:
total += number
count += 1
print(total // count)
# 해결 코드
number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
total = 0
count = 0
for number in number_list:
total += number
count += 1 # for문에 속하여 실행하여야 하기 때문에 들여쓴다.
print(total / count)
몫(//)을 구하는 연산자를 사용한다면 출력 값인 5.5가 나오지 않기 때문에
나누기(/)로 바꿔 입력한다.
8번
모음의 개수를 찾는 코드의 오류를 해결한다.
# 오류 코드
word = "HappyHacking"
count = 0
for char in word:
if char == "a" or "e" or "i" or "o" or "u":
count += 1
print(count)
# 해결 코드
for char in word:
if char in ["a", "e", "i", "o", "u"]:
count += 1
print(count)
대괄호로 리스트를 만들어 주고,
=이 아닌 in으로 바꿔준다.
리스트 상태에서 =로 한다면 모음 모두가 해당되기 때문에 0이 출력되기 때문이다.
9번
과일의 개수를 구하는 코드의 오류를 해결한다.
# 오류 코드
from pprint import pprint
fruits = [
"Soursop",
"Grapefruit",
"Apricot",
"Juniper berry",
"Feijoa",
"Blackcurrant",
"Cantaloupe",
"Salal berry",
]
fruit_count = {}
for fruit in fruits:
if fruit not in fruit_count:
fruit_count = {fruit: 1}
else:
fruit_count[fruit] += 1
pprint(fruit_count)
# 해결 코드
for fruit in fruits:
if fruit not in fruit_count:
fruit_count[fruit] = 1
else:
fruit_count[fruit] += 1
pprint(fruit_count)
if문에서 fruit_count[fruit]의 값을 1로 초기화한다.
10번
더 큰 최댓값을 찾기 위한 코드의 오류를 해결한다.
# 오류 코드
number_list = [1, 23, 9, 6, 91, 59, 29]
max = max(number_list)
number_list2 = [2, 5, 100, 20, 50, 10, 91, 82]
max2 = max(number_list2)
if max > max2:
print("첫 번째 리스트의 최댓값이 더 큽니다.")
elif max < max2:
print("두 번째 리스트의 최댓값이 더 큽니다.")
else:
print("첫 번째 리스트의 최댓값과 두 번째 리스트의 최댓값은 같습니다.")
# 해결 코드
number_list = [1, 23, 9, 6, 91, 59, 29]
max1 = max(number_list) #max는 예약어이므로 변수 이름을 max1로 바꿔준다.
number_list2 = [2, 5, 100, 20, 50, 10, 91, 82]
max2 = max(number_list2)
if max1 > max2:
print("첫 번째 리스트의 최댓값이 더 큽니다.")
elif max1 < max2:
print("두 번째 리스트의 최댓값이 더 큽니다.")
else:
print("첫 번째 리스트의 최댓값과 두 번째 리스트의 최댓값은 같습니다.")
max는 예약어이므로 변수 이름을 max1로 바꿔준다.
11번
영화의 정보를 찾는 코드의 오류를 해결한다.
# 오류 코드
from pprint import pprint
def movie_info(movie, genres):
genres_names = []
genre_ids = movie["genre_ids"]
for genre_id in genre_ids:
for genre in genres:
if genre_id == genre["id"]:
genre_name = genre["name"]
genres_names.append(genre_name)
new_movie_info = {
"genre_names": genres_names,
"id": movie["id"],
"overview": movie["overview"],
"title": movie["title"],
"vote_average": movie["vote_average"],
}
if __name__ == "__main__":
movie = {
"adult": False,
"backdrop_path": "/tXHpvlr5F7gV5DwgS7M5HBrUi2C.jpg",
"genre_ids": [18, 80],
"id": 278,
"original_language": "en",
"original_title": "The Shawshank Redemption",
"overview": "촉망받는 은행 간부 앤디 듀프레인은 아내와 그녀의 정부를 살해했다는 누명을 쓴다. 주변의 증언과 살해 현장의 그럴듯한 증거들로 그는 종신형을 선고받고 악질범들만 수용한다는 지옥같은 교도소 쇼생크로 향한다. 인간 말종 쓰레기들만 모인 그곳에서 그는 이루 말할 수 없는 억압과 짐승보다 못한 취급을 당한다. 그러던 어느 날, 간수의 세금을 면제받게 해 준 덕분에 그는 일약 교도소의 비공식 회계사로 일하게 된다. 그 와중에 교도소 소장은 죄수들을 이리저리 부리면서 검은 돈을 긁어 모으고 앤디는 이 돈을 세탁하여 불려주면서 그의 돈을 관리하는데...",
"popularity": 67.931,
"poster_path": "/3hO6DIGRBaJQj2NLEYBMwpcz88D.jpg",
"release_date": "1995-01-28",
"title": "쇼생크 탈출",
"video": False,
"vote_average": 8.7,
"vote_count": 18040,
}
genres_list = [
{"id": 28, "name": "Action"},
{"id": 12, "name": "Adventure"},
{"id": 16, "name": "Animation"},
...
pprint(movie_info(movie, genres_list))
# 해결 코드
from pprint import pprint
def movie_info(movie, genres):
genres_names = []
genre_ids = movie["genre_ids"]
...
new_movie_info = {
"genre_names": genres_names,
"id": movie["id"],
"overview": movie["overview"],
"title": movie["title"],
"vote_average": movie["vote_average"],
}
return new_movie_info
이하 생략
new_movie_info 딕셔너리를 return 해줘야 설정한 키값의 정보가 출력될 수 있는 딕셔너리가 출력된다.
19번
숫자의 길이를 구하는 코드의 오류를 해결한다.
(양의 정수number를 문자열로 변경하는 것은 금지. str() 사용 금지)
# 1. 문자열로 형변환
number = 123
print(len(str(number)))
# 2. 123
# 123 == 100 + 2 + 3
# == (100 * 1) + (2 * 10) + (3 * 1) 으로 생각해보자.
number = 123
result = 0
while number !=0: #몫이 0이 되면 종료해야 하므로, 0이 아닐때까지 계속 반복한다.
number = number // 10
result += 1
print(result)
# 3. 내가 사용한 방법 (10으로 나누기)
def digit_cnt(n):
cnt = 0
while n:
n //= 10
cnt += 1
return cnt
print(digit_cnt(123))
# 4. log
import math
print(int(math.log(number, 10)) + 1)
10으로 나누어 몫을 활용한다.
while문을 통해 몫이 0이 되는 순간까지 자릿수를 증가시킨다.
입력값을 10으로 나눠가며 나머지를 버리고 몫만 남길 때마다 cnt에 1씩 증가시킨다.
while문을 탈출할 때는 0이 되고 cnt에는 숫자의 길이가 담긴다.
log의 방법은 math 모듈을 불러와 log10 기능을 사용한다.
'Algorithm' 카테고리의 다른 글
백준 1157, 2851, 2941 / 프로그래머스 76501 정리 (0) | 2022.07.31 |
---|---|
백준 문제 풀이 (2231, 2609, 2846, 2953) (0) | 2022.07.26 |
백준 문제 풀이 (2577, 2908, 8958), 프로그래머스 68644 (0) | 2022.07.25 |
알고리즘 오답 정리 (codeup 6074, 6081, 6082, 6083 / SWEA 1288, 1545, 1989) (0) | 2022.07.24 |
실습 문제 풀이 (나머지를 이용한 문제 풀이) (0) | 2022.07.19 |