일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- KT
- 에이블스쿨
- Anaconda
- 내일배움카드
- numpy
- YOLO
- 에이블스쿨6기
- 딥러닝
- 해외연수
- KT AIVLE SCHOOL
- AI
- 에이블데이
- AIVEL
- jupyter notebook
- 코딩테스트
- AIVLE
- sklearn
- keras
- Aivle school
- kaggle
- pandas
- 미니프로젝트
- HUFS
- 부트캠프
- KT에이블스쿨
- KT wiz
- Python
- 한국외대
- 내배카
- 자연어처리
- Today
- Total
Hyunn
SWEA - 18662. 등차수열 만들기 본문
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
GitHub: https://github.com/hyunjin1999/Algorithm_solving/blob/master/SWEA/18662_D3.py
세 번째 연습!
등차수열을 만드는 문제이다. 문제를 간단히 설명하자면 1, 2, 3과 같은 수는 등차수열이고 1, 3, 4와 같은 수는 등차수열이 아니다. 등차수열이 아닌 수를 한 번만 조정하여 등차수열을 만들 수 있는 가장 작은 x를 찾는 것이다. 그럼 1, 3, 4에서 x는 1이 될 것이다. 2, 3, 4로 만들면 등차수열이 되니까.
먼저, 어떻게 풀어야할지 감이 잡히지 않았다. 10분은 멍하니 문제만 계속 읽었던 것 같다. 그러던 중, 등차수열은 "첫 번째 값 + 세 번째 값 / 2 = 두 번째 값" 이라는 생각이 떠올랐다. 그런데, 이렇게만 하면 항상 두 번째 값을 바꿀 필요는 없잖아? 라는 생각에 차례대로 첫 번째, 두 번째, 세 번째 값을 각각 x로 두고 등차수열을 만들 수 있는 3가지 경우의 수 중 가장 작은 값을 찾아면 되겠다! 라는 생각이 들었다. 즉, 아래와 같다.
이런식으로 생각하고 코드를 작성했다.
결과는...
아... 제일 난감하다. 차라리 모두 틀렸으면 아예 알고리즘을 갈아 엎었을텐데...
그래서 뭐가 잘못됐지 생각하다가 문제를 다시 읽어보았다. 문제에서 "소수점 첫째자리까지 출력"이라고 했지 반올림 하란 말은 없었다. 그래서 문자열 포매팅을 사용해 소수점 첫째자리까지만 출력하도록 바꿨다.
결과는...
풀었죠?
import math
T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
li = list(map(int, input().split()))
first_num = abs(li[0] - (li[1] * 2 - li[2]))
sec_num = abs(li[1] - ((li[0] + li[2]) / 2))
third_num = abs(li[2] - (li[1] * 2 - li[0]))
ans = min(first_num, sec_num, third_num)
print("#{} {:.1f}".format(test_case, ans))
더 좋은 알고리즘이 있다면 알려주세요.
또 주석안달았네...
'Coding Test' 카테고리의 다른 글
백준 - 1874번 스택 수열 (0) | 2024.01.17 |
---|---|
SWEA - 6485. 삼성시의 버스 노선 (0) | 2024.01.06 |
SWEA - 1206. [S/W 문제해결 기본] 1일차 - View (2) | 2024.01.06 |