728x90
t=int(input())
n=1
ans=[]
i=0
for i in range(t):
  a,b = map(int,input().split())
  x=b-a
  while(1):
    if(n*(n-1)<x<=n**2): 
      ans.append(2*n-1)
      break
  
    elif(n**2<x<=n*(n+1)):
      ans.append(2*n)
      break
      
    else:
      n+=1

for p in range(t):
  print(ans[p])

 

ㅋㅋ시간초과;

 

그래서 짠 두번째 코드 (간략화)

 

t=int(input())
i=0
for i in range(t):
  a,b = map(int,input().split())
  x=b-a
  n=0
  while True:
    if x <= n*(n+1):
      break
    n+=1

  if x <= n**2:
    print(2*n-1)

  else:
    print(2*n)​

 

 

중간지점을 찾으면 풀릴거라 생각했던 탄소 

 

 

시간제한이 2초라 ㅈ밥이라 생각했던 탄소

그리고 시간제한에 걸려버렸고ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

2초라 널널하게 짜도 될거라 생각해서 효율 버리고 편한대로 짰지만 생각보다 깐깐했던 백준

 

그래서 탄소는

 

"수학"을 하기로 한다.

 

 

사실 장난으로 노가다 컨셉 잡아본거였는데 의외로 돼서 놀랐음.

처음엔 저것들 간의 규칙을 방정식으로 나타내서 근의공식을 쓸까 생각했지만 그거보다 더 간단한게 있다는걸 깨달음.

그건 바로...

 

"수열"

 

 

킹갓수열.

 

 

그렇다. 이번 문제는 아예 100퍼센트 순수 수학이였던 것이다.

알고리즘따위 1도 필요없는 고등학교 2학년 이상이면 다 배운 '수열'.

 

요즘 과외애들 하는게 이차부등식이랑 수열 이런건데 너무 숙제로 내주고싶게 생김

진짜 존나 적당히 그 두 컨셉을 섞은 응용문제야... 너무 이뻐...

근데 애들은 존나 싫어할듯

내가 '허수아비' 드립만 쳐도 정색하던데ㅠ

 

여튼 대충 수열의 합공식 이용하니까 저런 규칙이 나와서

범위에 따라서 값이 바뀌니까 대충 부등식을 쓴 모습.

 

그리고 파이썬은 진짜 무적임 부등기호 두개를 한 식에 쓸 수 있다니 

이러다가 진짜 파이썬 중독돼서 '아마추어'그래머 될거같음

파이썬은 알고리즘 공부할때만 쓰는거로. 

 

라고 말하고 알고리즘 피해서 수학문제만 푸는 사람입니다. 

 

다음 골드는 꼭 알고리즘으로...

728x90

+ Recent posts