안녕하세요 연하입니다.
이어서 정답률 66% 문제를 풀어보겠습니다.
1. 유한소수 판별하기
function solution(a, b) {
while(1){
if(a%2 === 0){
a/=2;
}
else if(a%5 === 0){
a/=5;
}
if(b%2 === 0){
b/=2;
}
else if(b%5 === 0){
b/=5;
}
if(a%2 !==0 && a%5 !== 0 && b%2 !==0 && b%5 !== 0){
break;
}
}
return b === 1 || b/a === 1 || Number.isInteger(a/b)?1:2;
//분자가 분모보다 큰 경우도 포함.
}
2. 치킨 쿠폰
function solution(chicken) {
var answer = 0;
let sum = 0;
let rest = 0;
while(chicken >= 10){
answer = chicken - chicken%10;
rest += chicken%10;
chicken = answer/10;
if(rest >= 10){
rest = rest%10;
chicken+=10;
}
sum += answer;
}
sum += rest+chicken;
return Math.floor(sum/10);
}
(추가!!)
function solution(chicken) {
return parseInt((chicken-1)/9);
}
등비수열의 합을 이용하면 위의 식과 같이 나올 수 있다.
치킨 열마리당 쿠폰 하나, 쿠폰 열개 당 치킨 한마리는 치킨 한마리를 시켜먹으면 1+1/10을 먹는것과 같다.
치킨 a마리를 먹으면 총 먹을 수 있는 치킨의 갯수는 a + a*1/10+a*1/10*1/10+a*1/10*1/10*1/10+...... 무한대이다.
무한등비급수의 합 공식을 떠올려보면 a/1-r이다. a:초항,r:공비
따라서
입출력 예제 chicken = 1081, result = 120을 이용해 풀이를 하면
a = 1081, 1081/1-1/10 = 1081*10/9 = 1201.111111..로 총 먹을수 있는 치킨의 양이다.
받을 수 있는 최대 서비스 치킨의 수를 return하라 했으므로 1201.111-1081을 내림한 120이 되는것이다.
이때 공식은
function solution(chicken) {
return parseInt((chicken)/9);
}
으로 추정된다.
하지만 주의할점은 9의 배수에서 문제가 생긴다.
치킨을 9마리 먹었다고 생각해보자. 쿠폰이 10개가 모이지 않았지만 공식에 적용하면 공짜 치킨이 생겨버린다.
이는 18마리, 27마리 ... 를 대입해봐도 결과가 똑같다.
따라서 치킨에 한마리를 시켰을 때 주는 쿠폰수인 1을 빼주게되면 숫자가 한칸씩 앞으로 당겨지게 되어 문제가 해결된다.
3. 등수 매기기
function solution(score) {
let answer = score.map(x => (x[1]+x[0])/2);
score = score.map(x => (x[1]+x[0])/2).sort((a,b)=>b-a);
return answer.map(x=> score.indexOf(x)+1);
}
(추가!!)
function solution(score) {
return score.map(el => {
return score.filter(x => x[0]+x[1]>el[0]+el[1]).length+1;
});
}
4. 특이한 정렬
function solution(numlist, n) {
let l = 0;
numlist = numlist.map(x=>x-n).sort((a,b)=>(Math.abs(a)-Math.abs(b)));
for(let i = 0; i < numlist.length-1 ; i++){
if(Math.abs(numlist[i])===Math.abs(numlist[i+1])){
if(numlist[i] < numlist[i+1]){
l = numlist[i];
numlist[i] = numlist[i+1];
numlist[i+1] = l;
}
}
}
return numlist.map(x => x+n);
}
(추가!!)
function solution(numlist, n) {
return numlist.sort((a,b) => Math.abs(a-n)-Math.abs(b-n)||b-a);
}
//n을 기준으로 오름차순 정렬이지만 n과의 거리가 같을때 0이므로 ||를 통해 b-a인 내림차순으로 정렬한다.
'코테 준비 > [JS] 프로그래머스' 카테고리의 다른 글
프로그래머스 0단계: 정답률 60% - 다항식 더하기 (0) | 2024.08.05 |
---|---|
[프로그래머스 0단계 :JS] 작성일 기준 정답률 61% - 최빈값 구하기 (0) | 2022.12.05 |
[프로그래머스 0단계 :JS] 작성일 기준 정답률 67% - 로그인 성공? (0) | 2022.12.01 |
[프로그래머스 0단계 :JS] 작성일 기준 정답률 68% (0) | 2022.12.01 |
[프로그래머스 0단계 :JS] 작성일 기준 정답률 69% - 삼각형의 완성조건(2) (0) | 2022.12.01 |