JS 프로그래머스 (입문) 8-11일차
💡외계 행성의 나이
function digitToChar(digit) {
return String.fromCharCode(digit + 'a'.charCodeAt(0));
}
function solution(age) {
let ageArray = String(age).split("");
let alphaArray = [];
for(let i = 0; i < ageArray.length; i++) {
let num = parseInt(ageArray[i]);
console.log(num);
alphaArray.push(digitToChar(num));
}
return alphaArray.join("");
}
어렵게 생각해서 함수를 만들었는데 다시 보니 0~9까지의 알파벳a~j만 두고 생각하면 되었다.
map의 활용과 문자열 인덱스 접근에 대해 잊고 있어서 다시 확인차 기록해둔다.
function solution(age) {
return age
.toString()
.split("")
.map((v) => "abcdefghij"[v])
.join("");
}
💡진료 순서 정하기
function solution(emergency) {
let sorted = [...emergency].sort((a, b) => b - a);
let answer = emergency.map(e => sorted.indexOf(e) + 1);
return answer;
}
sort로 정렬했는데 indexOf를 몰라서 조금 헤맸다.
결과적으로 메서드만 알면 index만 뽑아서 새로운 배열로 리턴해주면 되는 문제.
💡개미 군단
function solution(hp) {
let general = parseInt(hp/5);
hp %= 5;
let soilder = parseInt(hp/3);
hp %= 3;
let worker = hp;
let totalAnts = general + soilder + worker;
return totalAnts;
}
조건에 따라 개미의 체력을 나누는 점에서 약간 헤맨 문제이다.
💡가위, 바위, 보
function solution(rsp) {
let rspArray = rsp.split("")
let strArray = [];
for(let i = 0;i<rspArray.length;i++){
if(rspArray[i] ==='2'){
strArray.push('0')
} else if(rspArray[i]==='0'){
strArray.push('5')
} else {
strArray.push('2')
}
}
return strArray.join("");
}
일단은 가장 무난하게 생각나는 방법인 if문으로 풀었다.
이와 달리 arr객체와 map 함수를 사용해서 더 간단하게 푸는 방법이 있었다.
객체에 키값 쌍이 존재한다는 것을 활용한 부분이 명료하게 느껴진다.
function solution(rsp) {
let arr = {
2: 0,
0: 5,
5: 2
};
var answer = [...rsp].map(v => arr[v]).join("");
return answer;
}
💡점의 위치 구하기
function solution(dot) {
let left = dot[0];
let right = dot[1];
let answer = 0;
if(left>0&&right>0){
answer= 1;
} else if(left<0&&right>0){
answer = 2;
} else if (left<0&&right<0){
answer =3;
} else {
answer = 4;
}
return answer;
}
어떻게든 풀기는 했는데, 아래 같이 if문은 한줄로 쓰고 변수명도 x y로 잡는 게 훨씬 직관적인 것 같다.
function solution(dot) {
var answer = 0;
const x = dot[0];
const y = dot[1];
if (x > 0 && y > 0) answer = 1
if (x < 0 && y > 0) answer = 2
if (x < 0 && y < 0) answer = 3
if (x > 0 && y < 0) answer = 4
return answer;
}
💡2차원으로 만들기
function solution(num_list, n) {
var answer = [];
for(let i=0;i<num_list.length;i+=n){
answer.push(num_list.slice(i, i+n))
}
return answer;
}
slice() 메서드를 사용하여 자른 뒤에 다른 배열에 push 해서 합친다.
for문 내부에 i++가 아니라 i+=n이 된다는 것에 주목할 필요가 있다.
💡주사위 개수
function solution(box, n) {
const width = box[0];
const length = box[1];
const height = box[2];
let answer = parseInt(width/n) * parseInt(length/n) * parseInt(height/n);
return answer;
}
let [width, length, height] = box; 를 통해서 구조분해 할당을 사용하면 더 깔끔하게 쓸 수 있다.
💡최댓값 만들기
function solution(numbers) {
const list = numbers.sort((a,b)=>a-b);
const answer = list[list.length-1]*list[list.length-2];
return answer;
}
sort를 통해서 먼저 배열을 순서대로 정렬한 뒤 가장 큰 두 수를 곱한다.
sort((a,b)=>b-a); 로 정렬 순서를 바꿨으면 조금 더 보기에 깔끔할 것 같다.
💡팩토리얼
function fac(n){
if (n === 0 || n === 1) {
return 1;
} else {
return n * fac(n - 1);
}
}
function solution(n) {
let number = 0;
for (let i=1;i<=n;i++){
if(fac(i)<=n){
number = i;
} else {
break;
}
}
return number;
}
factorial을 재귀함수로 구하는 함수를 하나 만든 뒤에 풀었다.
다시 보니까 while문을 써도 괜찮았을 것 같다.
function solution(n) {
let number = 0;
while(fac(number)<=n){
number++;
}
return number-1;
}