일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로그래머스
- 백준
- dacon
- Kaggle
- 우분투
- 캐치카페
- 자연어처리
- Baekjoon
- ubuntu
- github
- ChatGPT
- 편스토랑 우승상품
- Docker
- 코로나19
- 맥북
- programmers
- 금융문자분석경진대회
- Git
- hackerrank
- gs25
- 데이콘
- AI 경진대회
- 프로그래머스 파이썬
- 더현대서울 맛집
- SW Expert Academy
- 편스토랑
- 파이썬
- PYTHON
- leetcode
- Real or Not? NLP with Disaster Tweets
- Today
- Total
솜씨좋은장씨
[Programmers] 다음에 올 숫자 (Python) (feat.ChatGPT) 본문
코딩 1일 1문제! 오늘의 문제는 프로그래머스의 다음에 올 숫자 입니다.
👨🏻💻 문제 풀이 - SOMJANG
1. 리스트의 모든 원소의 등차와 등비를 구하고 각각 등차, 등비를 저장하는 list 에 저장합니다.
ㄴ 등비를 구할때는 수열에 0이 들어있을 경우를 대비하여야 합니다.
2. 이렇게 각각 저장해 둔 list 를 set 으로 만들었을때 길이가 1이 되는 list 가
ㄴ 등차를 저장한 list 이면 -> 이 리스트는 등차 수열 -> 1 과 등차를 return
ㄴ 등비를 저장한 list 이면 -> 이 리스느는 등비 수열 -> 2 와 등비를 return
이라고 판단 합니다.
3. 등차 수열일 경우 -> 입력 받은 리스트의 마지막 값에 등차를 더한 값을 정답으로
등비 수열일 경우 -> 입력 받은 리스트의 마지막 값에 등비를 곱한 값을 정답으로 하였습니다.
👨🏻💻 코드 (Solution) - SOMJANG
def is_arithmetic_or_geometric(common):
arithmetic_diff_list = []
geometric_diff_list = []
option = 0
for idx in range(len(common)-1):
arithmetic_diff_list.append(common[idx+1] - common[idx])
geometric_diff_list.append(common[idx+1] / common[idx] if common[idx] != 0 else 0)
if len(set(arithmetic_diff_list)) == 1:
return 1, arithmetic_diff_list[-1]
elif len(set(geometric_diff_list)) == 1:
return 2, geometric_diff_list[-1]
def get_next_number(last_num, diff_num, option):
"""
option : 1 - arithmetic 2 - geometric
"""
if option == 1:
return last_num + diff_num
elif option == 2:
return int(last_num * diff_num)
def solution(common):
option, diff_num = is_arithmetic_or_geometric(common)
return get_next_number(
last_num=common[-1],
diff_num=diff_num,
option=option
)
👨🏻💻 문제 풀이 - ChatGPT
주어진 리스트 common이 등차수열인지, 등비수열인지 확인하고, 그에 따라 다음에 올 숫자를 계산하여 반환하는 함수를 작성할 수 있습니다.
등차수열일 경우, 마지막 원소와 그 이전 원소의 차이를 구하면 공차가 됩니다. 따라서, 마지막 원소에 공차를 더한 값이 다음에 올 숫자가 됩니다.
등비수열일 경우, 마지막 원소와 그 이전 원소의 비율을 구하면 공비가 됩니다. 따라서, 마지막 원소에 공비를 곱한 값이 다음에 올 숫자가 됩니다.
아래는 Python으로 작성한 함수의 예시입니다.
예를 들어, solution([1, 2, 3, 4])를 호출하면, 등차수열이므로 4와 3의 차이는 1이므로, 4 + 1 = 5를 반환합니다. solution([2, 4, 8])을 호출하면, 등비수열이므로 8을 4로 나눈 값인 2를 곱해 16을 반환합니다.
👨🏻💻 코드 (Solution) - ChatGPT
def solution(common):
# 등차수열인 경우
if common[1] - common[0] == common[-1] - common[-2]:
return common[-1] + (common[1] - common[0])
# 등비수열인 경우
else:
return common[-1] * (common[-1] // common[-2])
여러 케이스를 생각하느라 장황하게 여러개의 함수로 작성한 저와는 다르게
문제에서 말한 input 제한 사항을 최대한 활용하여 아주 간결한 코드를 작성해주었습니다.
이와 비슷한 코드가 다른 사람의 풀이에 많이 있는 것을 보면
뭔가 github 에서 가져온 학습 데이터 중에 이런 코드가 있었나? 라는 생각도 들기도 했습니다.
ChatGPT 의 문제풀이는 매번 새로운 느낌 인 것 같습니다.
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[Programmers] 약수 구하기 (Python) (feat.ChatGPT) (0) | 2023.04.08 |
---|---|
[Programmers] 369게임 (Python) (feat.ChatGPT) (0) | 2023.04.07 |
[Programmers] 제곱수 판별하기 (Python) (feat.ChatGPT) (0) | 2023.04.05 |
[BaekJoon] 27889번 : 특별한 학교 이름 (Python) (0) | 2023.04.04 |
[Programmers] 2차원으로 만들기 (Python) (feat.ChatGPT) (0) | 2023.04.02 |