시간 복잡도를 중요하게 생각하고 풀어야 하는 문제이다.
처음 문제를 보고 for loop 가 생각했는데, 초기값과 증가하는 구문이 루프 앞과 바디로 들어가면서 결국 종료 조건을 보는 부분만 남게 되었다. 그래서 while로 바꾸었다.
1차로 만든 버전은 아래와 같이 되었다.
public int solveWithLoop(int X, int Y, int D) {
int cp = X;
int count = 0;
while (cp < Y) {
cp = cp + D;
count++;
}
return count;
}
그런데 테스트를 돌려보니 실패가 난다.
시간복잡도는 선형이다.
시간이 오래 걸리는 것은 계산 제한 시간을 초과해 버리는 것이 문제이다.
그래서 계산을 하는 것으로 바꾸었더니 통과가 된다.
시간복잡도는 상수.
public int solveWithCalculate(int X, int Y, int D) {
int count = (Y - X) / D;
if (D * count + X == Y) {
return count;
}
return count + 1;
}
'Applications' 카테고리의 다른 글
요새 유행은 다크테마(Dark theme)인듯... (0) | 2019.01.22 |
---|---|
VirtualBox 5.2.20 - macOS 설치 실패시 (0) | 2018.11.01 |
Sublime Text 라이센스 구매 (0) | 2018.08.03 |
[codility] Lesson 2 Arrays CyclicRotation - 입력에 대한 체크를 하자! (0) | 2018.07.31 |
"Google 포토 백업" 앱 지원 종료 알림이 왔다. (0) | 2018.04.20 |