문제 설명 : 특이한 정렬
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 한다.
이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치한다.
정수가 담긴 배열 numlist와 정수 n이 주어질 때
numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return 하는 solution 함수???
제한 사항
- 1 ≤ n ≤ 10,000
- 1 ≤ numlist의 원소 ≤ 10,000
- 1 ≤ numlist의 길이 ≤ 100
- numlist는 중복된 원소를 갖지 않는다.
입출력 예
numlist | n | result |
[1, 2, 3, 4, 5, 6] | 4 | [4, 5, 3, 6, 2, 1] |
[10000,20,36,47,40,6,10,7000] | 30 | [36, 40, 20, 47, 10, 6, 7000, 10000] |
문제 풀이
numlist를 map으로 돌면서 n만큼뺀 arr배열을 만든 후
array배열에 [abs(arr),numlist] 를 넣어줬다.(Math.abs는 절댓값 구하는 함수)
그리고 sort로 정렬해주고 map을 사용해 numlist의 원소들만 다시 가져온 배열을 만들었다.
function solution(numlist, n) {
let arr = numlist.map(v => n-v)
let array = []
for(let i = 0; i < numlist.length; i++) {
array.push([Math.abs(arr[i]),numlist[i]])
}
array.sort((a,b) => a[0]-b[0]||b[1]-a[1])
return array.map((s) => s[1])
}
문제를 풀고 다른사람의 문제 풀이를 봤는데 굳이 배열에 넣어줄 필요 없이 아래처럼 정렬하면 되는 거였.....
역시 똑똑한 사람들은 많다...
function solution(numlist, n) {
return numlist.sort((a, b) => Math.abs(a - n) - Math.abs(b - n) || b - a);
}
문제 설명 : 유한소수 판별하기
소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 한다.
분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 한다.
유한소수가 되기 위한 분수의 조건은 다음과 같다
- 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 한다.
두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return 하는 solution 함수???
제한 사항
- a, b는 정수
- 0 < a ≤ 1,000
- 0 < b ≤ 1,000
입출력 예
a | b | result |
7 | 20 | 1 |
11 | 22 | 1 |
12 | 21 | 2 |
문제 풀이
유클리드 호제법으로 최대공약수를 구하는 함수 getGcd를 만들고
[ getGcd함수에 두 수 a,b를 넣고 a를 b로 나눈 나머지가 0이면 b를 반환한다.
나머지가 0이아니면 다시 getGcd함수에 (몫인) b와 (a를 b로 나눈 나머지) a % b를 넣어 반복(재귀함수)]
분모인 b를 최대공약수(gcd)로 나눈 수의 소인수가 2와 5만 존재해야 유한소수이기 때문에
분모/gcd 를 2와 5로 계속 나눠주고 2와 5로 안 나눠지면 멈추게 했다.
2와 5로만 이루어졌다면 최종적으로 1이 나올것이기 때문에
1이면 1 아니면 2가 나오도록 문제를 풀어줬다.
function solution(a, b) {
let getGcd = (a,b) => (a % b === 0) ? b : getGcd(b, a % b)
let gcd = getGcd(a,b)
let B = b / gcd
while(true) {
if (B % 2 === 0) {
B /= 2
}else if (B % 5 === 0){
B /= 5
} else{
break;
}
}
return B === 1 ? 1 : 2
}
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Programmers' 카테고리의 다른 글
Programmers 문제 풀이 34 (0) | 2023.08.02 |
---|---|
Programmers 문제 풀이 33 (0) | 2023.07.31 |
Programmers 문제 풀이 31 (0) | 2023.07.27 |
Programmers 문제 풀이 30 (0) | 2023.06.28 |
Programmers 문제 풀이 29 (0) | 2023.06.27 |