99클럽 코테 스터디 1일차 TIL
💜 JAVA 미들러
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long x = sc.nextLong();
long y = sc.nextLong();
int z = (int)(y * 100 / x);
int round = -1;
if(z < 99) {
round = (int) Math.ceil((100 * y - (z + 1) * x) / (double) (z - 99));
}
System.out.println(round);
}
}
수학 계산하느라 고생했다...
제한사항을 보면 x
는 1,000,000,000을 넘는다. 그러면 int로 값을 받는 것이 어렵다고 느껴져 x
와 y
를 long으로 값을 받았다.
long x = sc.nextLong();
long y = sc.nextLong();
먼저 승률 z
를 구해야 했다.
z = y / x * 100;
로 구했더니 정수가 아닌 소수로 계산이 되면서 냅다 0이 되어버리는 현상이 생겼다. 그래서 y
를 x
로 나누는 것이 아니라 100을 곱하는 것을 먼저 실행시키도록 하였다.
z = y * 100 / x;
김형택이 앞으로 계속 이기기만 한다면 승률z
가 변할 수 있는 방법은 오로지 +1이다.
그래서 z
가 +1을 하려면 몇판(a)을 더 해야하는 지 계산했다.
z + 1 = (y + a) / (x + a) * 100
z + 1 = (100y + 100a) / (x + a)
(z + 1)(x + a) = 100y + 100a
(z + 1)x + (z + 1)a = 100y + 100a
(z + 1)x + (z - 99)a = 100y
(z - 99)a = 100y - (z + 1)x
a = (100y - (z + 1)x) / (z - 99)
이를 코드로 풀어내고 around
가 소수일 수 있으므로 Math.ceil()
함수를 통해 올림처리 해주었다.
round = (int) Math.ceil((100 * y - (z + 1) * x) / (double) (z - 99));
위 식을 실행하기 전에 제약조건을 하나 걸었는데 이미 모든 판을 이긴 100%의 승률이거나 거의 다 이겼으나 한판이라도 진 승률 99%인 경우 100%로 올라갈 수 없기 때문에 99%미만의 경우에만 위 식을 실행시켰고 99% 이상인 경우 -1을 출력하게 해놨다.
(처음에 100퍼 미만으로 설정했다가 여러번 틀렸습니다를 보고 깨달았다...😢)
int round = -1;
if(z < 99) {
round = (int) Math.ceil((100 * y - (z + 1) * x) / (double) (z - 99));
}
System.out.println(round);
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
long x = Long.parseLong(s[0]);
long y = Long.parseLong(s[1]);
int z = (int)(y * 100 / x);
int round = -1;
if(z < 99) {
round = (int) Math.ceil((100 * y - (z + 1) * x) / (double) (z - 99));
}
System.out.println(round);
}
}
사실 업무하면서 변수를 직접 입력 받을 일이 없다보니 값을 입력받기 위해 뭘 써야하더라 하고 당황했다. 가장 먼저 떠오른 Scanner
를 사용했는데 BufferedReader
를 사용하면 속도가 빨라진다고 해서 한창 연습했던 기억이 나 BufferedReader
로 변경하여 작성해봤다.
위에가 BufferedReader
, 아래가 Scanner
를 사용한 결과이다.
확실히 속도차이가 많이 난다.
Scanner
보다 BufferedReader
를 사용하는 걸 다시 연습해야겠다.
질문 게시판을 통해서 이분 탐색을 통해서 구하는 방식이 더 많다는 것을 알게되었다.
이분 탐색도 공부해봐야겠다.