github.com/taemin-kwon93 Github 보러가기 ->

Data Structures and Algorithms/Problems

CodeUp 예제 풀이 1092번문제Java 최소 공배수

태민Kwon 2022. 4. 5. 10:14

1092 : [기초-종합] 함께 문제 푸는 날

 


 같은 날 동시에 가입한 3명의 사람들이 온라인 채점시스템에 들어와 문제를 푸는 날짜가
매우 규칙적이라고 할 때, 다시 모두 함께 문제를 풀게 되는 그날은 언제일까?
예를 들어 3명이 같은 날 가입/등업하고, 각각 3일마다, 7일마다, 9일마다
한 번씩 들어온다면, 처음 가입하고 63일 만에 다시 3명이 함께 문제를 풀게 된다.

 

 같은 날 동시에 가입한 인원 3명이 규칙적으로 방문하는,
방문 주기가 공백을 두고 입력된다. (단, 입력값은 100이하의 자연수이다.)

 

 3명이 다시 모두 함께 방문해 문제를 풀어보는 날(동시 가입/등업 후 며칠 후?)을 출력한다.

 

1092번 문제, Taemin's Github 바로가기✨


 해당 문제는 x, y, z의 수를 입력받아 세 수의 최소 공배수를 구하면 됩니다.

 

 초등수학에서 배운 최소공배수를 구하는 방법은 여러가지가 있습니다.

- 공약수에 서로소까지 곱합니다.

- 지수를 이용한다. 소인수 분해 후 가장 큰 지수와 공통이 아닌 소수를 모두 곱하여 값을 구합니다.

- 임의의 수를 두고 x, y, z를 이용해 나눠본다.

 

 Java를 이용한다면 어떻게 최소공배수를 구할까요?

임의의 수를 두고 x, y, z를 이용해 나누어 보도록 하겠습니다.

day 라는 값을 1로 저장한 후, 논리 연산자 ' || '를 이용해 연산 하도록 합니다.

day를 x로 나눴을 때 나머지의 값이 0이 되지 않거나

y로 나누었을때, z로 나누었을 때 나머지 값이 0이 되지 않는다면, while문은 계속해서 반복합니다.

즉 x, y, z로 각각 day를 나눴을때 나머지의 값이 0이 되는 순간 day는 증가하지 않고 while문을 빠져나옵니다.

코드를 다르게 적는다면 아래와 같습니다.

while(!(day % x == 0 && day % y == 0 && day % z == 0)) {
			day++;
		}

최종적으로 System.out.println으로 출력될 day는 최소공배수 값이 됩니다.