오늘도 algorithm 문제 풀다 한번 위기에 봉착해서 오답노트겸 적어놓는다.
package com.yongk.algospot.RATIO;
import java.util.Scanner;
public class RATIO {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = Integer.parseInt(sc.nextLine());
while(T-- > 0) {
long N = sc.nextLong();
long M = sc.nextLong();
System.out.println(getMinimumTick(N, M));
}
}
private static long getMinimumTick(long N, long M) {
long Z = (long)(1 + M * 100 / N);
if (Z >= 100) return -1;
return (long)Math.ceil((Z * N - 100 * M) / (100 - Z));
}
}
위에서 틀린 것을 찾아보면..Math.ceil에 들어가는 인자가 long으로 연산되어 double로 cast 되어 Math.ceil에 입력됨.
private static long getMinimumTick(long N, long M) {
long Z = (long)(1 + M * 100 / N);
if (Z >= 100) return -1;
return (long)Math.ceil((double)(Z * N - 100 * M) / (100 - Z));
}
로 변경이 필요하다.
별 것 아닌데 개고생함.결론:
1. 가급적이면 실수 연산을 정수 연산에 섞지 않고
2. 섞어야 한다면 캐스팅 반드시 할 것
댓글 없음:
댓글 쓰기