Notice
														
												
											
												
												
													Recent Posts
													
											
												
												
													Recent Comments
													
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- react
 - sort
 - 정규표현식
 - JavaScript
 - 기술면접
 - hash
 - 프로그래머스
 - node.js
 - CSS
 - 완전탐색
 - 자바스크립트
 - 병합 정렬
 - useState
 - 연결리스트
 - 알고리즘
 - JS
 - 합병 정렬
 - 리액트
 - 백준
 - BOJ
 - 딥다이브
 - state
 - 해시
 - 정렬
 - 코테
 - Node
 - 최소공배수
 - 코딩테스트
 - 자료구조
 - 브루트포스
 
													Archives
													
											
												
												- Today
 
- Total
 
가치투자자
[BOJ] 5086번 : 배수와 약수 본문
728x90
    
    
  반응형
    
    
    
  백준 5086번 : 배수와 약수

🔗 문제 링크
https://www.acmicpc.net/problem/5086
5086번: 배수와 약수
각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.
www.acmicpc.net
💬 문제
약수 와 배수 에 대한 이해가 있다면, 충분히 풀 수 있는 문제다.
- 각 줄마다 2개의 수가 주어질 때, 두 수의 관계를 파악해야 한다.
- 1번째 숫자가 2번째 숫자의 약수면 factor를 출력해준다
- 1번째 숫자가 2번째 숫자의 배우면 multiple을 출력해준다
- 둘 다 아니라면 neither를 출력해준다 - 마지막 줄에 0이 2개 주어지므로, 이때 출력을 끝내준다.
 

💡 입력값 받아오기
JavaScript로 풀 경우, 입력값(input)을 어떻게 받아와야 할 지가 중요하다.
이 문제에서는 각 줄마다 자연수 2개씩 주어진다. 공백을 기준으로 두 수 a, b를 잘라주고 정수화해준다.
마지막의 "0 0"은 계산해줄 필요가 없으니 input에서 제거해준다.

입력값을 받아오는 것과 관련해 더 자세한 내용은 아래 링크를 참고 바란다.
https://valueengine.tistory.com/2
[BOJ] Node.js로 백준(BOJ) 푸는 법 및 VSCode 환경 세팅
1. Node.js fs모듈 사용법 백준에서 JavaScript로 문제를 풀기 위해선 Node.js를 사용해야 하며, 이때 readline 모듈이나 fs 모듈로 입력값(input)을 받아와야 한다. 이 중 속도나 코드의 길이, 작성 편리성에
valueengine.tistory.com
💻 풀이
이 문제는 총 2가지 방식으로 풀 수 있다.
🔑 풀이1 : 나머지 값으로 약수 or 배수 검증
- 줄바꿈과 공백을 기준으로 input을 잘라주고 모든 수를 정수화해준다.
- 맨 마지막 [0, 0]은 필요 없으므로 pop()으로 제거해준다
- input은 [[8, 16], [32, 4], [17, 5]]이 된다
 - input에서 map()으로 2개의 수가 담긴 배열을 가져와 각 숫자로 나눠 두 수의 관계를 판단해준다.
1) 두 번째 수가 첫 번째 수로 나눠지면 "약수(factor)"
2) 첫 번째 수가 두 번째 수로 나눠지면 "배수(multiple)"
3) 둘 다 아니라면 "neither"를 출력해준다 
// input값 처리
const input = require('fs').readFileSync('/dev/stdin')
  .toString().trim().split('\n').map((v) => v.split(" ").map((v) => +v));
input.pop();  // 맨 끝 [0, 0] 제거
console.log(input.map(function solution(nums) {  // 한 줄씩 입력
  if (nums[1] % nums[0] === 0) {  // 약수
    return 'factor';
  } else if (nums[0] % nums[1] === 0) {  // 배수
    return 'multiple';
  } else {
    return 'neither';  // 둘 다 아닐 때
  }
}).join('\n'));
시간은 다음과 같이 걸렸다.

🔑 풀이2 : Number.isInteger() 메서드
- 줄바꿈과 공백을 기준으로 input을 잘라주고 모든 수를 정수화해준다.
- 맨 마지막 [0, 0]은 필요 없으므로 pop()으로 제거해준다
- input은 [[8, 16], [32, 4], [17, 5]]이 된다
 - input에서 map()으로 2개의 수가 담긴 배열을 가져와 각 숫자로 나눠 두 수의 관계를 판단해준다.
1) 두 번째 수를 첫 번째 수로 나눴을 때, 정수로 딱 나눠떨어지면 "약수(factor)"
2) 첫 번째 수를 두 번째 수로 나눴을 때, 정수로 딱 나눠떨어지면 "배수(multiple)"
3) 정수로 딱 떨어지지 않는다면, "neither"를 출력해준다 
// input값 처리
const input = require('fs').readFileSync('/dev/stdin')
  .toString().trim().split('\n').map((v) => v.split(" ").map((v) => +v));
input.pop();  // 맨 끝 [0, 0] 제거
console.log(input.map(function solution(nums) {  // 한 줄씩 입력
  if (Number.isInteger(nums[1] / nums[0])) {  // 약수
    return 'factor';
  } else if (Number.isInteger(nums[0] / nums[1])) {  // 배수
    return 'multiple';
  } else {
    return 'neither';  // 둘 다 아닐 때
  }
}).join('\n'));
시간은 다음과 같이 걸렸다.

🎯 풀이를 위한 개념 설명
1. Number.isInteger() 메서드
- 주어진 값이 정수인지 판단하는 메서드이다.
 - Boolean(참/거짓, true/false)값을 반환한다.
 
Number.isInteger(매개변수);
예시>
Number.isInteger(0);         // true
Number.isInteger(1);         // true
Number.isInteger(-100000);   // true
Number.isInteger(0.1);       // false
Number.isInteger(Math.PI);   // false, Math.PI는 파이(원주율, 3.14)
Number.isInteger(NaN);       // false, NaN (Not a Number)
Number.isInteger(Infinity);  // false, (양의) 무한대
Number.isInteger(-Infinity); // false, (음의) 무한대
Number.isInteger('10');      // false, 문자열
Number.isInteger(true);      // false, Boolean값
Number.isInteger(false);     // false, Boolean값
Number.isInteger([1]);       // false, 배열
References
728x90
    
    
  반응형
    
    
    
  'Problem Solving > BOJ' 카테고리의 다른 글
| [BOJ] 1934번 : 최소공배수 (0) | 2023.04.15 | 
|---|---|
| [BOJ] 2609번 : 최대공약수와 최소공배수 (0) | 2023.04.13 | 
| [BOJ] 9506번 : 약수들의 합 (0) | 2023.04.06 | 
| [BOJ] 2501번 : 약수 구하기 (0) | 2023.04.06 | 
| [BOJ] 11004번 : K번째 수 (0) | 2023.04.05 |