Programmers

Programmers 문제 풀이 32

백단비 2023. 7. 28. 18:15

문제 설명 : 특이한 정렬

정수 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
}

 

 

https://programmers.co.kr 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

320x100

'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