Dev.baelanche
10^2 마다 그 중간값이 사랑스러움 수치가 가장 크다는걸 눈치채야한다. 1~9 : 5 10~99 : 50 100~999 : 500 ... 순이다. 4, 49, 499도 위 숫자의 사랑스러움 값과 동일하다. n이 두자리수이고 50보다 작다면 n의 사랑스러움 수치가 최대값이다. 값이 int의 범위를 가뿐히 넘어가므로 적절한 자료형으로 풀어주자. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); while(t-->0) { int k = sc.nextInt(); for(long i=10; true; i*=10) { if(k < i) { if(k <..
위 문제를 풀기위한 구조들로 1. 팀 번호, 문제 번호 별로 푸는데 걸린시간을 저장한 배열 int t[][] = new int[n+1][m+1]; 2. 팀 번호, 푼 문제 수, 총 걸린 시간을 저장한 클래스 를 만들어 주었다. static class Team { int no; int solve; int time; Team(int no, int solve, int time) { this.no = no; this.solve = solve; this.time = time; } } 먼저 RE, TLE, WA의 경우에는 팀 번호, 문제 번호 별로 걸린시간을 더해준다. if(result.equals("WA") || result.equals("RE") || result.equals("TLE")) t[teamNo][p..
문제 내용은 읽을 필요가 전혀 없고 출력부분에 (|N-M|) 만 확인하면 된다. |-2000000000 - 2000000000| 의 경우 int형을 초과하게 되므로 long타입으로 선언해주면 된다. 쉬운문제이다 보니 이부분을 간과하여 정답률이 꽤나 낮은듯하다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long n = sc.nextInt(); long m = sc.nextInt(); System.out.println(Math.abs(n - m)); } }
짱짱 쉬운 문제이다. 사각형의 특성상 같은 x좌표에 점이 두개, 같은 y좌표에 점이 두개 있어야 한다. 주어진 입력에서 x, y 좌표 각각에 왕따인 수를 찾아주면 된다. 구현방법은 엄청 많겠지만 간단한 문제인 만큼 편하게 짰다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x[] = new int[1001]; int y[] = new int[1001]; for(int i=0; i
A, B, C, D 배열의 각각을 더해서 0과 비교하기에는 시간이 너무 오래걸린다. 1. A, B의 모든 부분합을 저장한 배열을 만든다. (C, D의 부분합 배열이어도 상관없다.) 2. C, D의 모든 부분합을 저장한 Map을 만든다. 부분합 중 중복된 수가 있다면 카운트를 올린다. Map의 Key를 sum, Value를 카운트로 사용했다. 3. A, B의 부분합 배열과 Map의 원소들을 비교하며 두 원소의 합이 0일 경우 카운트만큼 개수를 올린다. 코드는 알아보기 꽤나 쉽다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int temp..
기존 점화식은 Y / X * 100 이지만 y에 비해 x가 무진장 크다면 0.0000xxxx.... 가 되어 100을 곱해도 0이 되게 된다. 따라서 Y * 100 / X 로 점화식을 짜주고 y * 100이 int의 범위를 벗어날 수 있으므로 long타입으로 해준다. X와 Y가 같지 않은 이상 절대로 확률이 100%가 될 수 없으므로 Y * 100 / X 가 99이면 -1을 출력한다. 그 외의 경우에는 이분탐색으로 기존의 승률보다 높으면서 판수가 가장 적을때를 찾아낸다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long x = sc.nextInt(); long y = sc..
동원 끝나고 첫 포스팅이다! 여러 방법으로 풀 수 있겠지만 수학으로 풀었다. 정상에 올라간 후에는 미끄러지지 않으므로 내려갈때의 횟수가 1만큼 적다. A = 2, B = 0, V = 5 인 경우, 3번만에 올라갈 수 있지만 x = (5 - 0)/(2 - 0) = 2 로 소수점 이하가 생길시 +1을 해줘야한다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int v = sc.nextInt(); System.out.println((v-b)%(a-b) == 0 ? (v-b)/(a-b) : (v-b)/(a..
투포인터를 통해 hi * hi - low * low 와 G를 비교한다. 투포인터 탐색을 언제 멈출건지가 가장 중요한데, low + 1 = hi 이고 두수의 제곱의 차가 G보다 작으면 더이상 연산할 필요가 없다. 또한 현재 몸무게와 이전 몸무게는 모두 자연수로 0이 될 수 없다는 점을 주의하자. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int g = sc.nextInt(); int lo = 1; int hi = 1; boolean f = false; while(true) { long minus = (long)(Math.pow(hi, 2)) - (long)(Math.pow(l..