728x90
반응형

 

 

백준 2609번 Node.js(자바스크립트) 풀이 


❓ 문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

 

💻 입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

 

📈 출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

 

반응형

👩🏻 내가 제출한 코드

const input = require('fs').readFileSync("dev/stdin").toString().trim().split(" ");

//최대공약수 >> 두 수를 동시에 나눌수있는 가장 큰 수 / b와 a를 b로 나눈 나머지의 최대공약수
let a = parseInt(input[0]>input[1]?input[0]:input[1]);
let b = parseInt(input[0]<input[1]?input[0]:input[1]);

//a와b의 나머지를 b에다 넣고 a에 b를 넣어서 b가 0이 되었을때 a가 최대공약수
while(b!==0){
    let temp = b;
    b = a % b;
    a = temp;
}

let a2 = parseInt(input[0]>input[1]?input[0]:input[1]);
let b2 = parseInt(input[0]<input[1]?input[0]:input[1]);

//최소공배수 >> 두 정수를 곱한 수에 최대공약수로 나눈 값
let result2 = a2*b2/a;

console.log(a);
console.log(result2);

 

👩🏻‍💻 풀이

//최대공약수 구하기 
// 두 수를 동시에 나눌수있는 가장 큰 수 
//즉, b와 a를 b로 나눈 나머지의 최대공약수

//입력값의 큰수가 무조건 a, 작은수가 b가 되도록 설정
let a = parseInt(input[0]>input[1]?input[0]:input[1]);
let b = parseInt(input[0]<input[1]?input[0]:input[1]);

//a와b의 나머지를 b에다 넣고 a에 b를 넣어서 b가 0이 되었을때 a가 최대공약수
while(b!==0){
    let temp = b;
    b = a % b;
    a = temp;
}

//a가 최대공약수이다.

>> while : 조건문이 참일 때 실행되는 반복문

 

//최소공배수 구하기
//두 정수를 곱한 수에 최대공약수로 나눈 값

//마찬가지로 입력값 중 큰 수가 a2, 작은 수가 b2가 되도록 설정
let a2 = parseInt(input[0]>input[1]?input[0]:input[1]);
let b2 = parseInt(input[0]<input[1]?input[0]:input[1]);

//두 정수를 곱한 수에 최대공약수로 나눈 값
let result2 = a2*b2/a;

>> parseInt( ) : 입력받은 값이 string이므로 숫자로 변환시키는 함수

 

console.log(a); //최대공약수
console.log(result2); //최소공배수

🤓문제 풀면서 느꼈던 점이나 고민했던 점

최대공약수과 최소공배수 초등학생때 배운 ㄴ자 나눗셈이 별로 도움이 안됐다. 아는 데 모르는 이 기분...😅

어떤 원리로 이루어지는지 찾아보고 이해하고 나니까 금방 풀었다. 


🔗문제 링크 

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

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

 


 

728x90
반응형