반응형
출처: https://www.hackerrank.com/challenges/strange-code/problem
시간의 경과와 달리 특정 규칙에 따라 숫자를 세고 있다.
[Counter Count]를 그대로 구현하는 주먹구구 방식은 시간을 만족하지 못한다.
각 Cycle의 시작시간과 끝시간은 다음과 같다.
(1) 1~3 → 차이 3
(2) 4~9 → 차이 6
(3) 10~21 → 차이 12
→ 차이는 진행되는 cycle이 2배씩 된다.
→ (해당 Cycle의) 시작 시간은 초기값 1부터 '차이'가 더해진 값이며
→ (해당 Cycle의) 종료 시간은 시작시간에서 '차이'가 더해진 값이다.
이를 수식적으로 계산하면 보다 빠르게 계산할 수 있다.
※ Test Case 중에 t가 int 범위를 벗어나는 것이 있어서 Long 타입 이용.
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Long t = sc.nextLong();
// 초기값 3을 설정
Long cc = 3L;
Long s_t = 0L;
Long e_t = s_t + cc;
// 어느 cycle에 해당 되는지 탐색
// 해당 cycle을 시작시작과 끝 시간을 도출
while(true) {
if(s_t + 1 <= t && t <= e_t) {
break;
}
s_t = s_t + cc;
// 다음 cycle에서는 counter count 2배로 계산
cc = cc * 2;
e_t = s_t + cc;
}
// 위에서 도출한 시작시간과 counter count를 이용해 계산
System.out.println(cc - (t - (s_t + 1)));
}
}
반응형
'PS 문제 풀이 > HackerRank' 카테고리의 다른 글
[HackerRank] Queen's Attack II (2) | 2021.02.18 |
---|---|
[HackerRank] The Bomberman Game (0) | 2021.02.18 |
[HackerRank] Cavity Map (0) | 2021.02.18 |
[HackerRank] 3D Surface Area (0) | 2021.02.18 |
[HackerRank] Repeated String (Java) (0) | 2021.02.14 |
댓글