목록Study (269)
전공공부
설명 N 부터 이하의 숫자중 소수 먼저 뽑아서 리스트에 넣고 상근수 만드는 구현 함수를 통해서 돌리고 1이 되면 그때의 상근수를 출력 그리고, 반복적인 숫자가 상근수 만드는 과정에서 나오면 이것은 반복해서 끝나지 않기 때문에 Map으로 중간 돌아가는 과정의 수를 저장하면서 상근수인지 판단 코드 package Math; import java.util.*; public class BOJ_9421 { static Map map; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); List list = getPrime(N); makeNum(list); } private static vo..

설명 순서를 지켜나가면서 생각하면 쉬운 문제다. 1. 우리는 먼저 기약 분수의 형태로 나누어 볼 것이다. 이때, 기약 분수처럼 나누려면 x, y 값이 예를 들어서 4, 8이 들어오면 1, 2 로 기약 분수처럼 끝까지 나눌 수 있고 이 형태 자체는 최대 공약수를 나누었을때 나오는 값이다. 2. 이때, x , y 값의 사각형의 크기 및 대각선의 형태 반복은 1,2의 사각형이 총 4 * 4개의 형태로 이루어진다. 즉, 아래 그림처럼 나올 것인데 이는 또한, 1,1 정사각형의 대각선의 길이를 구하기 위해서 진행된 것이므로 여기서 중간 라인이 지나가는 것을 이렇게 볼 수 있을 것이다. 중간에 1,1 정사각형은 이해를 위해서 넣었다. 결국 이렇게 지나가는 선이 거치는 사각형의 갯수를 카운팅하기 위한 것인데 잘 보면..
설명 2*5 인 경우를 배제하고 모든 1,2,3,4 등의 곱하기의 수를 구하기 위해서 식을 구현한다고 생각하고 문제를 풀면된다. 다만 1,2,3,4와 같이 2*5가 아닌 경우의 숫자들만 곱해도 Long의 범위를 훌쩍 넘어버리니 아래와 같이 최소한 큰 모듈러 수로 나머지를 사용하는 방식으로 진행했다. 만일 모듈러 연산자의 크기가 작다면 앞의 숫자들이 누락이 되어서 마지막 수가 달라 질 수 있는 가능성을 최소화하기 위해서 아래와 같이 모듈러 숫자를 크게 잡았다. 코드 import java.util.Scanner; public class BOJ_2553 { public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(Syst..
설명 홀수가 최대한 나올 수 있도록 유도하는게 목표이고 3개의 선택지가 있어서 굳이 조합을 사용하지 않았다. 코드 package Math; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class BOJ_21312 { public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); int arr[] = new int[3]; for (int i = 0; i < 3; i++){ arr[i] = sc.nextInt(); } List list = new ..
설명 처음에 모듈화를 하지 않고 줄줄 풀었더니 계속 어딘가에서 예외 상황이 발생해서 틀렸습니다를 반복해서 볼 수 있었던 코드다. 사실 세부 내용 자체는 어렵지 않다 에리토스테네스의 체를 활용해서 소수 구하고 그것을 더하고 또는 곱한 것을 이용해서 값을 찾는것을 반복하는 것인데 세부 모듈화를 하지 않으면 에러를 찾기 힘들것 같다. 그리고, 해당 100_000 이 부분은 최대 K 값이 될 수 있는 부분을 참고한 것으로 K는 최대 10^5승 까지 가능하다. 그래서, 소수의 곱을 (99991*99991= 9998200081)이런식으로 들어 왔을때, (9998200081 > 2147483647) int 범위를 넘칠 경우를 대비해서 사용했다. 코드 package Math; import java.io.Buffered..
설명 이건 해답을 주고 문제를 풀어나간다고 생각하고 풀면 된다. 기존의 서로 다른 진법으로 변환된 수 2개가 주어지면 이때 변환된 기존의 값 X 값과 어떤 진법으로 각각 변환했는지 보는 문제다. 그래서, 2진법 부터 36 진법 부터 모두 변환하며 진행하며 이때, long 값의 범위를 넘어가는 값은 에러처리 또는 Impossible 처리를 해주면 된다. 아래 코드는 API를 이용했지만, 실제로 변환하는 식을 구현해서 변환 하는 것이 좋을 것 같다. 코드 package Math; import java.util.Scanner; public class BOJ_21275 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ..
설명 1일 1문제 하는 사람들에게는 필요한 문제다. 코드 package Simulation; public class BOJ_10171 { public static void main(String[] args) { System.out.println("\\ /\\\n" + " ) ( ')\n" + "( / )\n" + " \\(__)|\n"); } } 10171번: 고양이 아래 예제와 같이 고양이를 출력하시오. www.acmicpc.net
설명 이제껏 풀었던 기법을 모두 사용했다 (유클리드 호제법 : 최소공배수) lcm = (a*b) / GCD(a,b); private static long lcm(long a ,long b) { long lcm = 0L; for (int i = 0; i < primes.size(); i++) { lcm = (a*b) / gcd(a, n); } return lcm; } 소수 구하기는 모두 시도 하되 Math.sqrt(n) 만큼 반복문을 돌리기 private static boolean isPrime(long n) { if (n < 2) return false; for (int i = 2; i * i