728x90
반응형
1. 문제
https://www.acmicpc.net/problem/1011
2. 코드
#include <iostream>
#include <cmath>
using namespace std;
typedef unsigned long long ll;
int main() {
int int_case;
ll x, y, res,distance, level;
cin >> int_case;
for (int i = 0; i < int_case; i++) {
cin >> x >> y;
distance = y - x;
if (distance > 0 && distance <= 3) {
res = distance;
}
else {
level = (int)sqrt(distance);
if (((level + 1) * (level + 1)) - (level+1) < distance && distance < ((level + 1) * (level + 1))) {
res = 2 * level+1;
}
else if (distance == level * level ) {
res = 2 * level -1;
}
else {
res = 2 * level;
}
}
cout << res << "\n";
}
return 0;
}
3. 결과
4. 문제 풀이 방식
- 가능한 경우의 수를 모두 계산하여 최소의 개수를 찾는 방법 -> 시간 부족으로 인한 실패
- 재귀함수를 작성하여 위와 같은 방식을 구현 -> 구현 실패
- 각 거리 별 결과를 직접 작성하여 패턴을 분석 -> 특정 경우에서 자리수가 증가하는 모습이 보여짐
- 해당 패턴을 기반으로 코드를 작성하여 제출 -> 50%에서 틀림
- 반례를 확인 -> 작성한 코드에선 문제에서 주어진 가장 큰 수 (2147483647)의 처리가 불가
- 자료형을 int -> unsigned long long으로 변경
- 거리가 제곱근의 제곱과 같은 경우 결과에 -1을 해주어야 함
ex) 거리가 9인경우 제곱근은 3이고, 자리수도 3 (2 * 2 - 1 = 3) - 아래는 분석한 자료임
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 단계별로 풀어보기 > 동적 계획법 1 (c++) (0) | 2022.02.16 |
---|---|
[백준] 단계별로 풀어보기 > DFS와 BFS (c++) (0) | 2022.02.05 |
[백준] 단계별로 풀어보기 > 정렬 (c++) (0) | 2022.01.30 |
[백준] 단계별로 풀어보기 > 브루트포스 (c++) (0) | 2022.01.26 |
[백준] 15965번 - K번째 소수 (실버 2) (0) | 2022.01.25 |
[백준] 단계별로 풀어보기 > 재귀 (c++) (0) | 2022.01.25 |
댓글