[엘리스 AI 7기 프리트랙] 오답노트 - 파이썬 기초 연습문제

bee·2023년 2월 4일
0
post-thumbnail

1. In the Middle

사용자로부터 공백을 기준으로 세 개의 정수를 입력받아 가운데 값을 출력하세요.

  • 입력예시 : 1 3 2
  • 출력예시 : 2
# 내 풀이 (오답풀이)
num = input().split() # str을 원소로 갖는 list
num.sort() # 사전순으로 정렬됨
print(num[1])

틀린이유 : num은 공백 기준으로 숫자를 입력한 리스트이지만, 리스트 내에서는 문자열로 인식한다. 그래서 num.sort()를 하게되면 사전순으로 정렬되기 때문에 num12 9 11을 입력하게 될 경우, 정렬되면 11 12 9가 되어서 num[1]을 할 경우 11이 출력된다.

num_str = input().split() # 문자열 원소로 이루어진 리스트
num_int = list(map(int, num_str)) # num의 각 원소를 정수형으로 변환
num_int.sort() # 오름차순 정렬
print(num_int[1]) # 중간값 출력

** 리스트 원소의 자료형 변환 방법 :list(map(변환할 자료형, 변환할 리스트명))

# ex)
>>> sample = ['1', '2', '3', '4', '5'] # 문자열 원소로 이루어진 리스트
>>> sample_int = list(map(int, sample)
>>> print(samle_int)
[1, 2, 3, 4, 5]

>>> sample_str = list(map(str, sample_int))
>>> print(sample_str)
['1', '2', '3', '4', '5']

2. 3, 6, 9!

사용자로부터 특정 숫자(정수)가 입력되었을 때 그 다음의 숫자가 숫자가 3의 배수라면 짝!을 출력하고 3의 배수가 아니라면 입력 받은 숫자의 다음 숫자를 출력하세요.

  • 입력예시 : 11 -> 출력예시 :짝!
  • 입력에시 : 7 -> 출력예시 : 8
# 내 풀이(정답풀이)
num = int(input())
numnext = num + 1

if numnext % 3 == 0 :
    print('짝!')
else:
    print(numnext)

틀린이유 : 처음에는 3의 배수를 구하라고 해서, 3의 배수 판정법인 '각 자릿수의 합이 3의 배수이면 3의 배수이다.' 를 생각했다. 그래서 더 복잡하게 돌아갔던 것 같다. 생각해보면 정말 단순한 문제였다.


3. 말썽쟁이 도도새

도도새는 1분에 하나씩 음식을 먹었고 먹은 음식은 매번 리스트의 형태로 저장해두었습니다. 또한 아팠던 시점에는 음식 리스트에 웩 이라고 저장이 되어 있습니다. 도도새가 아팠던 시점을 계산하여 그전까지 복통이 지속된 시간을 반환하는 vomit() 함수를 작성하세요.

  • 입력예시 : print(vomit(['과자', '과자', '과자', '커피', '과자', '웩', '음료수', '음료수', '과자', '커피', '커피', '커피']))
  • 출력예시 : 5
## 내 풀이(오답풀이)
def vomit(food):
    answer = ''
    for i in food :
        if food[i] == '웩' :
            answer = i
    return answer

# 값을 확인하기 위한 코드입니다. 값을 변경해가며 테스트해 보세요!
print(vomit(['과자', '과자', '과자', '커피', '과자', '웩', '음료수', '음료수', '과자', '커피', '커피', '커피']))

출력결과 : list indices must be integers or slices, not str
(해석 : 리스트의 인덱스는 문자열이 아니라 정수여야 한다.)
** indices : index의 복수형

# 내 풀이 (정답풀이)
def vomit(food):
    answer = ''
    for i in range(0,len(food)) :
        if food[i] == '웩' :
            answer = i
    return answer

# 값을 확인하기 위한 코드입니다. 값을 변경해가며 테스트해 보세요!
print(vomit(['과자', '과자', '과자', '커피', '과자', '웩', '음료수', '음료수', '과자', '커피', '커피', '커피']))

출력결과 : 5

틀린이유 : 문자열로 이루어진 리스트를 인덱싱할 때 각 인덱스번호는 문자열을 인식하게 된다. 따라서 인덱스 i가 숫자범위 내에서 반복될 수 있도록 정수범위(range(0,len(food)))로 바꿔주면 i는 인덱스 번호를, food[i]는 인덱스 번호에 위치한 원소(문자열)를 가리킬 수 있게 한다.

profile
벌집처럼 밀도있게 차곡차곡 쌓아나가는중

0개의 댓글