반응형

Java/백준알고리즘 111

[Java] 백준알고리즘 #1735 분수 합

두 분수를 합한 수를 약분하여 기약분수로 표시하는 문제. 두 분수를 합하는 방법은 2/7 + 3/5 의 경우 분모를 통일시켜줘야 하기 때문에 2/7 에 5를 곱하고, 3/5에 7을 곱해준다. 10/35 + 21/35 즉 31/35가 되는 것. 분자는 각 분모에 곱해진 수를 곱하여 더하고, 분모는 서로 곱하면 된다. 예를 하나 더 들어 보자면. 2/5 와 1/10의 경우, 각 수에 10과 5를 곱해주면 20/50 과 5/50 이 되어 25/50이 된다. 이를 기약분수로 나타내기 위해서는 분자와 분모의 최대공약수를 이용해 나눠주면 된다. 이는 앞서 사용했었던 유클리드 호제법을 이용해 최대공약수를 이용하면 간단하다. 2023.10.10 - [Java/백준알고리즘] - [Java] 백준알고리즘 #13241 최소..

[Java] 백준알고리즘 #13241 최소공배수

문제 설명에서 알 수 있듯이, 유클리드 호제법을 이용해 최소공배수를 구하는 문제이다. 먼저 유클리드 호제법에 대해 알아보자. 유클리드 호제법을 이용해 최대공약수를 구할 수 있다. 최대공약수를 구하면 자연스럽게 최소공배수도 구할 수 있는데, 예를 들어 35와 100의 경우 100을 35로 나눈 나머지 -> 30 35를 30으로 나눈 나머지 -> 5 30을 5로 나눈 나머지 -> 0 따라서 최대공약수는 5가 되고, 이를 이용해 최소공배수를 구하면 35 x 100 / 5 = 700 이 된다. 먼저 유클리드 호제법을 이용해 최대공약수를 구하는 식은 다음과 같다. long a = sc.nextInt(); long b = sc.nextInt(); long gcd = 0; // 최대공약수 if (a > b) { lo..

[Java] 백준알고리즘 #25305 커트라인

앞선 문제들을 해결할 때 사용했던 선택 정렬을 사용하면 간단하다. 2021.03.15 - [Java/백준알고리즘] - [Java] 백준알고리즘 #2798 블랙잭 [Java] 백준알고리즘 #2798 블랙잭 주어진 수들을 조합하여 3장의 카드를 골라 합이 m에 가장 근접하게 하는 문제이다. 이 문제는 선택정렬을 이용하여 풀면 간단하게 해결할 수 있다. 흔히 최소값, 최대값 또는 오름차순정렬 등을 sehyeok.tistory.com 2021.03.17 - [Java/백준알고리즘] - [Java] 백준알고리즘 #2750 수 정렬하기 [Java] 백준알고리즘 #2750 수 정렬하기 입력받은 수들을 오름차순으로 정렬하여 출력하는 문제이다. 앞서 여러 문제들을 풀면서 사용했던 선택 정렬을 이용하면 되겠다. 2021...

[Java] 백준알고리즘 #2587 대표값2

입력받은 5개의 수의 중간값과 평균을 구하는문제. 크기 5의 배열을 만들어서 이 배열을 크기순으로 나열하면 쉽게 해결 가능한 문제일 듯 하다. 2021.03.17 - [Java/백준알고리즘] - [Java] 백준알고리즘 #2750 수 정렬하기 [Java] 백준알고리즘 #2750 수 정렬하기 입력받은 수들을 오름차순으로 정렬하여 출력하는 문제이다. 앞서 여러 문제들을 풀면서 사용했던 선택 정렬을 이용하면 되겠다. 2021.03.15 - [Java/백준알고리즘] - [Java] 백준알고리즘 #2798 블랙잭 sehyeok.tistory.com 이전에 풀었던 선택정렬을 이용하여 배열을 크기순으로 정리. 이후 평균과 중간값을 도출하면 된다. 전체 코드는 다음과 같다. import java.util.Scanner..

[Java] 백준알고리즘 #19532 수학은 비대면강의입니다

연립방정식의 해를 구하는 문제 다양한 방법이 있겠지만 나는 아주 무식하고 단순한 방법으로 해결했다. 먼저 전체 코드를 보자. import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); int d = sc.nextInt(); int e = sc.nextInt(); int f = sc.nextInt(); for (int x = -999; x < 1000; x++) { for (int y = -999; y < 1000; y++) { ..

[Java] 백준알고리즘 #14215 세 막대

3개의 수를 입력받아서 만들 수 있는 가장 큰 삼각형의 둘레를 구하는 문제. 다만 막대는 줄이기만 가능하다. 먼저 삼각형을 만들 수 없는 조건을 알아보자. 두 변 길이의 합 < 나머지 한 변의 길이 인 경우는 삼각형을 만들 수 없다. (같은 경우는 직선이 된다.) 2 1 1 / 2 3 5 / 3 5 10 등과 같은 경우이다. 때문에 삼각형을 만들기 위해서는 가장 긴 변의 길이를 줄여나가야 한다. 2 1 1 / 2 3 5 / 3 5 10 의 경우 1 1 1 / 2 3 4 / 3 5 7 로 바꾼다면 삼각형을 만들 수 있다. 먼저 입력받은 세 수중 가장 큰 값을 a로 지정한다. int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); int tmp ..

[Java] 백준알고리즘 #5073 삼각형과 세 변

삼각형의 세 변을 입력받고 어떤 삼각형인지 출력하는 문제이다. 먼저 전체 코드를 보면 다음과 같다. import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); while (true) { int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); if (a == b && b == c) { if (a == 0) break; System.out.println("Equilateral"); } else if (a + b

[Java] 백준알고리즘 #9506 약수들의 합

입력받은 n의 약수들의 합을 구해 n이 완전수인지 아닌지 판별하는 문제. 입력 개수가 정해져있지 않으므로 while문을 사용해 n을 입력받는다. n이 -1이라면 break문을 이용해 빠져나가게 한다. int sum = 1; String result = n + " = 1"; 약수들의 합을 저장할 sum 변수와 결과를 출력할 result 변수이다. 출력에서처럼 + 기호를 출력하기 위해 sum은 1로 초기화하고, result변수에는 = 1 이라는 값으로 초기화했다. 1은 모든 수의 약수가 되기 때문에 반드시 포함될 것이기 때문. 이후 for문을 이용해 2부터 n / 2 까지 반복한다 (반복횟수를 줄이기 위해) 나머지가 0이면 약수라는 점을 이용해 약수를 sum 변수에 차례로 더해주고, result 변수에도 +..

[Java] 백준알고리즘 #2501 약수 구하기

입력받은 수 n의 약수들 중에서 k번째로 작은 수를 구하는 문제. 먼저 결과를 출력할 result변수를 선언해 0으로 초기화한다 (존재하지 않는 경우 0 출력을 위해) 그리고 1부터 n까지 반복하며 전체 약수를 구한다. 약수는 n을 어떤 수로 나누었을 때 나머지가 0인 것이므로 간단히 구할 수 있다. 이때, count변수를 두어 약수를 발견할 때 마다 하나씩 증가시켜 주자. 이 count가 k와 같아지는 지점에서, count를 result변수에 넣어서 출력해주면 끝. 전체 코드는 다음과 같다. import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System...

[Java] 백준알고리즘 #2903 중앙 이동 알고리즘

정사각형이 중복 되니 마니 이래저래 말이 많지만 결국에는 점의 수를 구하는 문제. 규칙을 보면 초기상태 4 1번시행 9 2번시행 25 ... 인 것을 알 수 있다. 이것은 정사각형의 변의 중앙에 점을 찍는 방식이므로 한 변에 있는 점을 안다면 모든 점을 알 수 있다. 한 변의 점을 기준으로 초기상태 2 1번시행 3 2번시행 5 ... 이 된다. 이것을 공식화한다면 초기상태 2 1번시행 : 2 + 1 = 3 2번시행 : 3 + 2 = 5 3번시행 : 5 + 4 = 9 ... n번시행 : (n - 1번째 시행값) + (n - 1번째 실행값 - 1) 이 됨을 알 수 있다. 이제 n번 시행 후 나온 큰 정사각형에서 한 변에 있는 점의 개수를 알았으니, 이를 제곱해주면 모든 점의 수를 구할 수 있다. 이를 코드로..

반응형