분류 전체보기
[백준/JAVA] 1676번 팩토리얼 0의 개수
소인수분해의 성질을 활용하여 N!의 끝에 0이 얼마나 많이 오는지 구하는 문제 https://www.acmicpc.net/problem/1676 1. 문제 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 2. 문제 접근 1) 첫째 줄에 N을 입력받는다. 2) N!의 뒤에 0은 10이 곱해질 때마다 하나씩 추가된다. 3) 10이 곱해지기 위해서는 N!에서 각 정수가 곱해질 때 5와 2가 곱해지면 된다. 4) 5의 배수 사이에는 짝수가 무조건 존재하므로 5의 개수만 구하면 0의 개수를 구할 수 있다. 3. 코드 import java.io.IOException; import java.io.BufferedReader; import java.io.InputStre..
[백준/JAVA] 1010번 다리 놓기
다리를 놓는 경우의 수를 구하는 문제 https://www.acmicpc.net/problem/1010 1. 문제 재원이는 한 도시의 시장이 되었다. 이 도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다. 하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪고 있음을 알고 다리를 짓기로 결심하였다. 강 주변에서 다리를 짓기에 적합한 곳을 사이트라고 한다. 재원이는 강 주변을 면밀히 조사해 본 결과 강의 서쪽에는 N개의 사이트가 있고 동쪽에는 M개의 사이트가 있다는 것을 알았다. (N ≤ M) 재원이는 서쪽의 사이트와 동쪽의 사이트를 다리로 연결하려고 한다. (이때 한 사이트에는 최대 한 개의 다리만 연결될 수 있다.) 재원이는 다리를 최대한 많이 지으려고 하기 때문..
[백준/JAVA] 2609번 최대공약수와 최소공배수
최대공약수와 최소공배수를 구하는 문제 https://www.acmicpc.net/problem/2609 1. 문제 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 2. 문제 접근 1) 2개의 수를 입력받는다. 2) 유클리드 호제법을 사용하여 최대공약수를 구한다. 3) 2개의 수를 곱하고 최대공약수로 나누어서 최소공배수를 구한다. 3. 코드 import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args)..
[백준/JAVA] 단계별로 풀어보기(8단계) 기본 수학 2
문제 1978) 소수 찾기 import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; 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()); boolean num[] = new boolean[1001]; num[1] = true; for(int i=2;i
[백준/JAVA] 2477번 참외밭
특정한 형태의 도형의 넓이를 구하는 문제 https://www.acmicpc.net/problem/2477 1. 문제 시골에 있는 태양이의 삼촌 댁에는 커다란 참외밭이 있다. 문득 태양이는 이 밭에서 자라는 참외가 도대체 몇 개나 되는지 궁금해졌다. 어떻게 알아낼 수 있는지 골똘히 생각하다가 드디어 좋은 아이디어가 떠올랐다. 유레카! 1m^2의 넓이에 자라는 참외 개수를 헤아린 다음, 참외밭의 넓이를 구하면 비례식을 이용하여 참외의 총개수를 구할 수 있다. 1m^2의 넓이에 자라는 참외의 개수는 헤아렸고, 이제 참외밭의 넓이만 구하면 된다. 참외밭은 ㄱ-자 모양이거나 ㄱ-자를 90도, 180도, 270도 회전한 모양(┏, ┗, ┛ 모양)의 육각형이다. 다행히도 밭의 경계(육각형의 변)는 모두 동서 방향이..
[백준/JAVA] 단계별로 풀어보기(7단계) 기본 수학 1
문제 1712) 손익분기점 import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int A = Integer.parseInt(st.nextToken()); int ..
[백준/JAVA] 11729번 하노이 탑 이동 순서
재귀적인 패턴을 찾아서 재귀함수로 찍는 문제 https://www.acmicpc.net/problem/11729 1. 문제 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. 아래 그림은 원판이 5개인 경우의 예시이다. 2. 문제 접근 1) 원판의 개수 N을 입력받는다. 2) Hannoi 함수를 이용하여 원판을 옮긴 횟수와 이..
[백준/JAVA] 18870번 좌표 압축
좌표 압축 https://www.acmicpc.net/problem/18870 1. 문제 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자. 2. 문제 접근 1) 첫째 줄에 좌표의 개수 N을 입력받는다. 2) N만큼 좌표를 입력받아서 배열에 저장한다. 3) 정렬되기 전의 배열이 후에 필요하기 때문에 배열을 하나 복사하여 만들어둔다. 4) 병합정렬을 이용하여 배열을 정렬한다. 5) 해쉬맵을 이용하여 정렬된 수와 해당하는 인..