안녕하세요, 코딩 푸는 남자 입니다.
오늘은 Programmers Level0 문제 중, "다음에 올 숫자" 문제를 풀어 보겠습니다.
우선 문제를 이해해 보겠습니다.
common은 정수 등비 수열 혹은 정수 등차 수열중 한가지로 이루어져 있습니다.
common이 [1, 2, 3, 4] 인 경우, 등차 수열로, 4 다음에 올 값을 예상해 보면 5 입니다.
common이 [2, 4, 8] 인 경우, 등비 수열로, 8 다음에 올 값은 16 입니다.
이번 문제는 주어진 common 배열이, 등차 수열인지, 등비 수열인지 알아보고, 마지막 인자 다음에 올 값을 return 하는 문제 입니다.
오홋! Level1을 한번 찍고 와서인지, 뭔가 쉽게 풀수 있을거 같은 느낌적인 느낌이 듭니다.
제가 푼 방식은 다음과 같습니다.
def solution(common):
answer = 0
if( (common[1] - common[0]) == (common[2] - common[1]) ):
answer = common[len(common) - 1] + (common[1] - common[0])
elif( (common[1] / common[0]) == (common[2] / common[1])):
answer = common[len(common) - 1] * (common[1] / common[0])
else:
pass
return answer
이 코드로 코딩 테스트를 통과 할수 있지만, 잠재적인 문제가 있습니다.
과연 무엇일까요?
10/3과 10//3의 차이점은 무엇일까요?
Python Code | 결과 |
print(10/3)
print(10//3)
|
3.3333333333333335 3 |
print(type(10/3))
print(type(10//3))
|
<class 'float'> <class 'int'> |
10/3은 float 객체를 반환하며, 결과는 3.3333... 입니다.
10//3은 int 객체를 반환하며, 따라서 결과는 3 입니다.
common은 정수형 배열이므로, / 보다는 // 를 사용하여 int 객체를 반환하는 것이 더 좋을것 같습니다.
def solution(common):
answer = 0
if( (common[1] - common[0]) == (common[2] - common[1]) ):
answer = common[len(common) - 1] + (common[1] - common[0])
elif( (common[1] // common[0]) == (common[2] // common[1])): #/를 //로 변경
answer = common[len(common) - 1] * (common[1] / common[0])
else:
pass
return answer
오늘은 "다음에 올 숫자"를 풀어 보았습니다.
감사합니다.
'CodingTest > Programmers' 카테고리의 다른 글
[Python]Level1 - 달리기 경주 (1) | 2023.11.28 |
---|---|
[Python]Level0 - 영어가 싫어요 (2) | 2023.11.26 |
[Python]Level0 - 순서쌍의 개수 (0) | 2023.11.25 |