본문 바로가기

Algorithm & Data Structure

백준 - 1011번

728x90
반응형
import math


c=0
p = []
casenumber = int(input())

while c <= casenumber-1:
    x, d = input("").split()#출발지점
    p.append(int(d) - int(x))
    c = c+1

for m in p:
    if m == 1:
        print(1)
    elif m ==2:
        print(2)
    else:
        i = int(1)
        g = 0
        count = 3
        z = []
        while g <= m:
            a = math.ceil(count / 2)
            for i in range(a):
                z.append(count)
            count = count + 1
            g = g + 1
        print(z[m-3])
        print(z)

2021년 12월 20일 현재 이렇게 짰을때 작동은 한다. 다만 시간초과 오류가 난다

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

1 2 3 3 4 4 5 5 5 6 6 6 7 7 7 7 8 8 8 8

 

이러한 규칙을찾았다 이것을 잘 활용하면 더 효율적인 방법을 찾을것이다.

규칙을 하나 더 추가 해야 한다.

2 + 2 + 3 +3.... 해서 나오는 결과값을 대응해서 출력해주면 된다.

 

t = int(input())

for _ in range(t):
    x, y = map(int,input().split())
    distance = y - x
    count = 0  # 이동 횟수
    move = 1  # count별 이동 가능한 거리
    move_plus = 0  # 이동한 거리의 합
    while move_plus < distance :
        count += 1
        move_plus += move  # count 수에 해당하는 move를 더함
        if count % 2 == 0 :  # count가 2의 배수일 때, 
            move += 1  
    print(count)

 

728x90
반응형

'Algorithm & Data Structure' 카테고리의 다른 글

DFS & BFS  (0) 2022.01.08
백준 - 2108번  (0) 2022.01.07
백준 - 1002번  (0) 2021.12.23
백준 - 4948번  (0) 2021.12.23
백준 - 2581번  (0) 2021.12.21