728x90
문제 링크
풀이 시간
아이디어: 20분
코딩: 10분
문제 풀이
조건)
- 처음과 끝 직전에는 무조건 속도 1로 도달해야한다.
- K번째 턴의 속도 V[K]는 V[K-1]-1, V[K-1], V[K-1]+1
조건을 해결하기 전 먼저 어떤 규칙이 있을 것 같다고 생각했다.
예를 들어 A=0, B=10이라고 가정하자.
구간의 길이는 총 B-A = 10이다.
눈으로 계산해보면
0 -(+1)-> 1, 1 -(+2)-> 3, 3 -(+3)-> 6, 6 -(+2)-> 8, 8 -(+1)-> 9, 9 -(+1)-> 10 이다.
가운데 값을 기준으로 양쪽으로 내려가는 것을 볼 수 있다.
무엇보다 끝에 +1이 두번 나오는 것을 통해, 남는 거리만큼 +1을 하면 될 것 같다고 생각했다.
이를 표로 남겨보자
왼쪽 칼럼을 속도라고 했을 때
개수, 남은 개수
1| 2 , 8
2| 2 , 4
3| 1 , 1
잘 보면 속도3일 때, 남는 거리 1이 있는 것을 알 수 있다.
이를 통해 프로그래밍 해보자.
코드
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <cmath>
#include <queue>
#define ll long long
using namespace std;
ll t, a, b;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> t;
while(t--) {
cin >> a >> b;
ll gap = b-a;
ll remain = gap;
ll res = 0;
bool flag = false;
for(int i=1;i<gap;i++) {
flag =false;
for(int j=1;j<=2;j++) {
if(remain - i >= 0) {
remain -= i;
res++;
}
else {
flag = true;
break;
}
}
if(flag)
break;
}
if(remain > 0) {
res++;
}
cout << res << "\n";
}
return 0;
}
x와 y가 2^31 이므로 타입을 조심하자.
728x90
'📊알고리즘 > BOJ' 카테고리의 다른 글
BOJ 1034 - 램프 (0) | 2024.10.28 |
---|---|
[랜덤] BOJ 1091 - 카드 섞기 (0) | 2024.10.25 |
BOJ 27172 - 수 나누기 게임 (0) | 2024.08.29 |
BOJ 2239 - 스도쿠 (0) | 2024.08.27 |
BOJ 1520 - 내리막길 (0) | 2024.08.16 |