BAEKJOON-1011 : Fly to the Alpha Centauri

1 분 소요

BEAKJOON-1011 : Fly to the Alpha Centauri

문제 사진

이 문제는 탐색으로도 풀 수 있을 것 같은데, 문제 조건 때문에 까다로울 것 같다.

나는 쉽게 풀 수 있으면 쉽게 풀자는 생각을 갖고 있어서 공식을 세워서 풀었다.

하 … 설명하기가 무척 힘들 것 같다 😵

공식을 세우기 위해 먼저 거리가 1,2,3,4,…,n일때 몇 번 움직여야 하는지를 구했다.

distance move turn num
1 1 1 1
2 2 1 0
3 3 2 1
4 3    
5 4 2 0
6 4    
7 5 3 1
8 5    
9 5    
10 6 3 0
11 6    
12 6    
13 7 4 1

일단 distancemove를 보자. move 를 보면 값이 올라가는 규칙이 보인다.

1: 1개, 2: 1개, 3: 2개, 4: 2개, 5: 3개, 6: 3개, 7: 4개 …

여기서 move 값의 개수가 1,1,2,2,3,3,4,4,5,5, .. 이런 식으로 2번째마다 값이 1 증가하는 것을 볼 수 있다.

move의 갯수를 의미하는 것이 turn이고, 2번째마다 turn의 값을 올려주는 변수가 num이다.

코드

n = int(input())
for _ in range(n):
    start, end = map(int, input().split())
    distance = end - start
    move, turn, num = 0, 0, 0
    i = 0
    while i < distance:
        num = (num + 1) % 2
        if num:
            turn += 1
        i += turn
        move += 1
    print(move)

변수들과의 관계는 파악하기 쉬웠지만, 막상 코드로 구현하기에는 내 머리가 잘 안 돌아가서 힘들었다..

난 항상 방법은 생각해내는데, 실현하기까지가 오래걸리는 것 같다. 이부분만 좀 보안하자..

카테고리:

업데이트:

댓글남기기