Notice
반응형
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- js
- deque
- html
- 문제풀이
- googleChart
- 응용SW
- input
- 수학
- java
- SQL
- TSX
- Eclipse
- 정처산기
- 자료구조
- npm
- Stack
- 에라토스테네스의 체
- 책추천
- react
- set
- node
- Oracle
- jsp
- HashMap
- 이클립스
- IntelliJ
- Algorithms
- script
- BREW
- 백준
Archives
- Today
- Total
개발하자
[백준][Java] 2485번 가로수 본문
728x90
안녕하세요 :)
적어도 하루 1개 이상 알고리즘 문제를 해결하려 노력하고 있습니다.
혼자 해결 가능한 문제도 있고, 어려웠던 문제도 있던 차라 복습하고자 글을 써 내려갑니다.
백준 2485 가로수
오늘 문제는 이미 심어져 있는 가로수 사이에 새로 나무를 심어 모든 가로수가 같은 간격이 되도록 하려면,
최소 몇 그루의 나무를 더 심어야 하는지를 구하는 문제입니다.
📘 문제
💡 해결 방법
모든 나무가 동일한 강격을 가지도록 하기 위해 모둔 간격의 최대공약수(GCD)를 기준 간격으로 사용해야 합니다.
그리고 간격마다 중간에 몇 그루를 더 심어야 하는지 계산하면 됩니다.
GCD에 대한 더 자세한 내용이 필요하시다면 아래 링크에서 확인 바랍니다.
[백준][Java] 1934번 최소공배수
안녕하세요 :)적어도 하루 1개 이상 알고리즘 문제를 해결하려 노력하고 있습니다.혼자 해결 가능한 문제도 있고, 어려웠던 문제도 있던 차라 복습하고자 글을 써 내려갑니다. 백준 1934 최소공배
hayleyun.tistory.com
✅ 풀이 및 설명 (설명은 더보기 클릭)
더보기
- 먼저 나무 사이의 간격 차이(diff) 를 모두 구합니다.
- 그 모든 간격들의 최대공약수(GCD) 를 구합니다.
- 각 간격마다 (간격 / GCD - 1)개의 나무가 필요합니다.
- 모든 간격에 대해 필요한 나무 수를 더해주면 정답입니다.
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// 심어져 있는 가로수
int[] trees = new int[n];
for (int i = 0; i < n; i++) {
trees[i] = Integer.parseInt(br.readLine());
}
// 각 가로수 사이 간격 구하기 (뒷나무 - 앞나무)
int[] diffs = new int[n - 1];
for (int i = 1; i < n; i++) {
diffs[i - 1] = trees[i] - trees[i - 1];
}
// 최대공약수 구하기 (나무 간격에 몇개의 나무가 심어져야 하는지)
int gcd = diffs[0];
for (int i = 1; i < diffs.length; i++) {
gcd = getGCD(gcd, diffs[i]);
}
// 새로 심어야 하는 나무 수 (간격 / 최대공약수 - 1 (-1은 이미 심어져 있는 나무))
int result = 0;
for (int diff : diffs) {
result += diff / gcd - 1;
}
System.out.print(result);
br.close();
}
private static int getGCD(int a, int b) {
if (b == 0 ) return a;
return getGCD(b, a % b);
}
}
이 문제는 단순 구현 문제가 아니라 수학적 사고가 중요한 문제였어요.
공부하면서 유용했던 부분 메모 겸 공유하고자 끄적입니다.
고쳐야 하는 부분 있다면 댓글 남겨주시면 수정하겠습니다.
행복한 하루 보내세요 (❁´◡`❁)
728x90
반응형
'Algorithms > Baekjoon' 카테고리의 다른 글
[백준][Java] 1929번 소수 구하기 (11) | 2025.04.22 |
---|---|
[백준][Java] 4134번 다음 소수 (2) | 2025.04.22 |
[백준][Java] 1735번 분수 합 (4) | 2025.04.22 |
[백준][Java] 13241번 최소공배수 (1) | 2025.04.22 |
[백준][Java] 1934번 최소공배수 (6) | 2025.04.20 |