백준 1011번 Fly me to the Alpha Centauri

정은경·2020년 3월 22일
0

백준 문제풀이

목록 보기
36/51

문제


나의 풀이

def min_num(a,b):
    num = b-a
    left = 1
    right = 1
    l_stack = list()
    r_stack = list()
    rlt = list()

    while num > 0:
        num -= left
        l_stack.append(left)
        left += 1

        if num >= right:
            num -= right
            r_stack.append(right)
            right += 1

    #print(l_stack, r_stack[::-1])
    rlt = l_stack + r_stack[::-1]
    # print(rlt)
    return len(rlt)

case_num = int(input())
for i in range(case_num):
    start, end = [int(x) for x in input().split()]
    print(min_num(start,end))

남의 풀이

case_num = int(input())
ans = []
for i in range(case_num):
    a, b = map(int, input().split())
    num = b-a
    k = 1
    p = 1
    while num > 0:
        num -= k
        k += 1
        if num >= p:
            num -= p
            p += 1

    ans.append(k+p-2)

for i in ans:
    print(i)    
  • 크흐!!! 정말 간단하게 푸심!!
  • 양쪽으로 1씩 증가하는 숫자를 num에서 빼고,
  • 왼쪽 위치의 숫자를 우선해서 빼는 규칙!

Reference

느낀 점

  • 반복되는 것에는 결과를 살펴보면 규칙이 있다
  • 결과적인 규칙을 찾자!
  • 규칙을 찾는 방법도 있겠지만! 단순하게 양쪽에 1씩 증가하는 숫자를 더하고, 더할 때는 왼쪽을 우선해서 더하면 해결됨!
[1 ... 1]
[1 2 ... 2 1]
profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글