골드 5
문제 링크(페이지) : https://www.acmicpc.net/problem/1011
1011번: Fly me to the Alpha Centauri
우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행
www.acmicpc.net
👇 문제 펼치기
문제 풀이
1부터 주어진 조건에 맞도록 횟수를 세고, 규칙을 파악한다.
총 거리 | 이동 과정 | 작동 횟수 | 반복 횟수 |
1 | 1 | 1 | 1 |
2 | 11 | 2 | 1 |
3 | 111 | 3 | 2 |
4 | 121 | 3 | - |
5 | 1211 | 4 | 2 |
6 | 1221 | 4 | - |
7 | 12211 | 5 | 3 |
8 | 12221 | 5 | - |
9 | 12321 | 5 | - |
10 | 123211 | 6 | 3 |
11 | 123221 | 6 | - |
12 | 123321 | 6 | - |
13 | 1233211 | 7 | 4 |
14 | 1233311 | 7 | - |
15 | 1233321 | 7 | - |
16 | 1234321 | 7 | - |
17 | 12343211 | 8 | 4 |
18 | 12343221 | 8 | - |
19 | 12343321 | 8 | - |
20 | 12344321 | 8 | - |
표를 보면 1-2-3-3-4-4-5-5-5... 로 규칙적으로 증가하고 있음을 알 수 있다.
반복 횟수는 1-1-2-2-3-3... 이런 식으로 두번 씩 반복되고,
반복 횟수마다 이동할 수 있는 최대 거리는 해당 거리(x)까지의 반복횟수를 모두 더한 것과 같다.
예를 들어 3번으로 이동할 수 있는 최대 거리는 12(1+1+2+2+3+3) 이다.
이 규칙을 이용해 코드를 짜면 다음과 같다.
코드
t = int(input())
for _ in range(t):
x, y = map(int, input().split())
distance = y - x # 이동거리
count = 0 # 작동 횟수
again = 1 # 반복 횟수 (처음엔 1회)
position = 0 # 이동 위치
while position < distance :
count += 1
position += again # count 수에 해당하는 반복 횟수를 더함
if count % 2 == 0 : # count가 2번 반복될 때 마다 반복횟수 증가
again += 1
print(count)
느낀점
방법이 쉽게 떠오르지 않을 때는 직접 하나씩 적어보면서 규칙을 파악해 보자.
728x90
'Algorithm > Problem' 카테고리의 다른 글
[Baekjoon] 10989번 : 수 정렬하기3 (0) | 2022.01.13 |
---|---|
[Baekjoon] 1436번 : 영화감독 숌 (0) | 2022.01.12 |
[Baekjoon] 1018번 : 체스판 다시 칠하기 (0) | 2022.01.12 |
[Baekjoon] 2447번 : 별 찍기 - 10 / 11729번 : 하노이의 탑 (0) | 2022.01.11 |
[Baekjoon] 1978번 : 소수찾기 / 1929번 : 소수 구하기 / 4948번 : 베르트랑 공준 / 9020번 : 골드바흐의 추측 (0) | 2022.01.09 |