Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ODQA
- mrc
- 글또
- Level2
- dp
- 이진탐색
- 구현
- 기술면접
- 백준
- 정렬
- 프로그래머스
- Level2_PStage
- dfs
- 개인회고
- 이코테
- 파이썬 3
- 그리디
- 다시보기
- 그래프이론
- 부스트캠프_AITech3기
- Level1
- 부스트캠프_AITech_3기
- 백트랙킹
- 최단경로
- 알고리즘스터디
- 단계별문제풀이
- U_stage
- python3
- 알고리즘_스터디
- 주간회고
Archives
- Today
- Total
국문과 유목민
[기본수학] 1011번 Fly me to the Alpha Centauri 본문
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다.
문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다.
소요시간: 1시간 + a
1. 문제 설명
https://www.acmicpc.net/problem/1011
- 특정한 이동 장치를 이용해서 이동하는 우주선이 있다. 해당 우주선이 x에서 y로 이동할 때 이동장치를 최소로 이용하는 방법은 무엇인가?
2. 접근 방식
- 처음에는 다양한 예외 케이스를 고려해서 반복문을 이용해 수를 증가시키려고 했는데, 시간초과가 발생했다.
- 결국 특정한 규칙을 이용해야하는 문제였다.
x와 y의 차를 기준으로 볼 때, 아래와 같은 규칙을 가진다.
x,y의 차가 1일 때 거리는 1
x,y의 차가 2일 때 거리는 2
x,y의 차가 4일 때 거리는 3
x,y의 차가 6일 때 거리는 4
x,y의 차가 9일 때 거리는 5
x,y의 차가 12일 때 거리는 6
x,y의 차가 16일 때 거리는 7
x,y의 차가 20일 떄 거리는 8
따라서 x, y 의 차가 1 2 2 3 3 4 4 ... 이런 식으로 차이가 나게 됨으로 이를 코드로 구현하면 문제를 해결할 수 있다.
3. 코드
- 초기 실수한 코드 ( 반복문 ) [틀린 코드]
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
x, y = map(int, input().split())
length_xy = y-x
case = [0, 1, 2] # 부터 시작
count = 1
dist = 1
if length_xy == 1:
print(count)
continue
if length_xy > 3:
while True:
dist += case[2]
case = [case[2]-1, case[2], case[2]+1]
count += 1
if dist >= length_xy//2:
break
while True:
if length_xy == dist:
print(count)
break
if (length_xy-dist) <= 2:
dist += 1
else:
dist += case[0]
case = [case[0]-1, case[0], case[0]+1]
count += 1
- 해답 코드 (규칙을 구현)
t = int(input())
for _ in range(t):
x, y = map(int, input().split())
length_xy = y-x
count = 0
distance = 0
a = 0.5 # 0.5로 둔 이유는 count가 2번증가할 때 1이 증가해야 하기 때문
while length_xy > distance:
a += 0.5
distance += int(a)
count += 1
print(count)
4. 코멘트
- 1시간 넘게 고민하다가 결국 다른 분의 코드를 본 문제였다. 해당 문제의 경우 초기 방향을 잘못 정한 것도 같기는 하다.
- 알고리즘을 잘 짜기 위해서는 규칙을 파악할 수 있어야 하는데 규칙을 찾아내기까지가 어려운 것 같다. (물론 당연한 얘기일 지도)
- 규칙을 찾기 위해 문제를 먼저 사전에 제대로 정리해야할 필요가 있어보인다.
'알고리즘_코딩테스트 > 백준코딩테스트_단계별문제풀이' 카테고리의 다른 글
[백트랙킹] 9663번 N-queens (해결) (0) | 2022.01.11 |
---|---|
[백트랙킹] 9663번 N-queen (미해결) (0) | 2022.01.08 |
[재귀] 11729번 하노이 탑 이동 순서 (0) | 2022.01.04 |
[재귀] 2447번 별 찍기-10 (0) | 2022.01.04 |
[기본수학2] 1002번 터렛 (0) | 2022.01.04 |