본문 바로가기
CODING/BAEKJOON

[BAEKJOON] 1145번 적어도 대부분의 배수

by snow_white 2022. 1. 26.


입력 수는 5개로 고정이다.

출력을 구하는 방법은 아래 이미지와 같이 총 10번의 연산을 통해 이루어진다.

1. 모든 경우의 수를 따져 5개의 수 중 3개를 골라 최소공배수를 구한다.

2. 최소공배수들 중 가장 작은 값을 출력한다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
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 arr[] = new int[5]; // 입력 받은 수
		int common_multiple[] = new int[10]; // 공배수 10개
		int cnt = 0;

		for (int i = 0; i < 5; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		for (int i = 0; i < 3; i++) {
			for (int j = i + 1; j < 4; j++) {
				for (int k = j + 1; k < 5; k++) {
					// 공배수 구해주는 함수
					common_multiple[cnt++] = multiple(arr[i], arr[j], arr[k]);
				}
			}
		}
		Arrays.sort(common_multiple);
		System.out.println(common_multiple[0]);
	}

	public static int multiple(int a, int b, int c) {
		int max=0, num1=0, num2=0, leastCommonMuliple=0, cnt=2;
		if(a>b) {
			if(a>c) {
				max = a;
				num1 = b; num2 = c;
			}else {
				max = c;
				num1 = a; num2 = b;
			}
		}else {
			if(b>c) {
				max = b;
				num1 = a; num2 = c;
			}else {
				max = c;
				num1 = a; num2 = b;
			}
		}
		for(int i=max; ; i=max*(cnt++)) {
			if(i%num1==0 && i%num2==0) {
				leastCommonMuliple = i;
				break;
			}
		}
		return leastCommonMuliple;
	}
}

[출처]

https://www.acmicpc.net/problem/1145

 

1145번: 적어도 대부분의 배수

첫째 줄에 다섯 개의 자연수가 주어진다. 100보다 작거나 같은 자연수이고, 서로 다른 수이다.

www.acmicpc.net

 

'CODING > BAEKJOON' 카테고리의 다른 글

[BAEKJOON] 1065번 한수  (0) 2022.01.26
[BAEKJOON] 4673 셀프 넘버  (0) 2022.01.26
[BAEKJOON] 2615번 오목  (0) 2022.01.25
[BAEKJOON] 1110번 더하기 사이클  (0) 2022.01.24
[BAEKJOON] 4344번 평균은 넘겠지  (0) 2022.01.24

댓글