[자바스크립트/javascript] 프로그래머스 : 코딩테스트 입문 41~50문제

41. 세균 증식

https://school.programmers.co.kr/learn/courses/30/lessons/120910?language=javascript 

 

프로그래머스

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

programmers.co.kr

function solution(n, t) {
    answer = n
    for (i=0; i<t; i++) answer *= 2
    return answer;
}

 

다른 사람 풀이들

function solution(n, t) {
  return n << t;
}

비트연산자를 이용한 풀이

<< (왼쪽시프트) : 비트 전체가 왼쪽으로 이동

n=2, t=10이면

2진수일 때 2는 10,인데 10만큼 비트가 밀어져서

100000000000 = 2048

 

function solution(n, t) {

    return n*Math.pow(2,t);
}

Math.pow를 이용한 풀이

Math.pow는 제곱을 구할 때 쓰는 함수이다.

위 식은 n * 2의t승이 된다.

n=7 , t=15일 때 결과는 229376이 되는데

229376을 소인수분해하면 2^15 * 7이 된다.

 

 

 

42. n의 배수 고르기

https://school.programmers.co.kr/learn/courses/30/lessons/120905?language=javascript 

 

프로그래머스

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

programmers.co.kr

function solution(n, numlist) {
    numlist = numlist.filter(num => num%n == 0)
    return numlist;
}

 

 

 

43. 직각삼각형 출력하기

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = line.split(' ');
}).on('close', function () {
    answer(Number(input[0]));
});

function answer(n) {
   for (i=1;i<=input;i++) {
    console.log("*".repeat(i))
    } 
}

살짝 당황했는데

Number(input[0])이 숫자가 입력되는 곳이고,

*이 출력될 함수를 만들고 그 함수로 Number(input[0]) 부분을 감싸면 된다.

 

 

44. 대문자와 소문자

https://school.programmers.co.kr/learn/courses/30/lessons/120893?language=javascript 

 

프로그래머스

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

programmers.co.kr

function solution(my_string) {
    str_list = []
    my_string = my_string.split('')
    for (i of my_string) {
        if (i === i.toUpperCase()) {
            str_list.push(i.toLowerCase())
        } else {
            str_list.push(i.toUpperCase())
        }
    }
    return str_list.join('');
}
function solution(my_string) {
    answer = ''
    for (i of my_string) {
        if (i === i.toUpperCase()) {
            answer += i.toLowerCase()
        } else {
            answer += i.toUpperCase()
        }
    }
    return answer;
}

밑에가 더 깔끔한 듯

 

 

45. 가위 바위 보

https://school.programmers.co.kr/learn/courses/30/lessons/120839

 

프로그래머스

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

programmers.co.kr

function solution(rsp) {
    let answer = "";
    for (i of rsp) {
        if (i === "2") {
            answer += "0";
        } else if (i === "0") {
            answer += "5";
        } else {
            answer += "2";
        }
    }
    return answer;
}

다른 사람 풀이

function solution(rsp) {
    return rsp.split("").map((v) => v==="2" ? 0 : (v==="0" ? 5 : 2)).join("")
}

map을 이용한 다음에 삼항연산자를 이용해서 이렇게 풀 수도 있나보다

 

function solution(rsp) {
    let arr = {
        2: 0,
        0: 5,
        5: 2
    };
    var answer = [...rsp].map(v => arr[v]).join("");
    return answer;
}

객체 이용

split(") 안 쓰고 [...rsp] 이렇게 적으면 자동으로 문자 하나하나가 나뉘어서 배열에 담아지나보다, 기억해둬야겠다

 

 

 

 

46. 암호 해독

https://school.programmers.co.kr/learn/courses/30/lessons/120892?language=javascript 

 

프로그래머스

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

programmers.co.kr

function solution(cipher, code) {
    answer = ''
    for (let i = code; i<=cipher.length; i +=code) {
        answer += cipher.slice(i-1,i)
    }
    return answer;
}
function solution(cipher, code) {
    answer = ''
    for (let i = code; i<cipher.length+1; i +=code) {
        answer += cipher[i-1]
    }
    return answer;
}

 

 

 

 

47. 주사위의 개수

https://school.programmers.co.kr/learn/courses/30/lessons/120845

 

프로그래머스

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

programmers.co.kr

function solution(box, n) {
    return parseInt(box[0]/n) * parseInt(box[1]/n) * parseInt(box[2]/n);
}

다른 사람 풀이

function solution(box, n) {
    return box.reduce((acc,v) => acc * Math.floor(v / n), 1);
}

reduce 이용

 

 

 

 

48. 문자열 정렬하기(1)

https://school.programmers.co.kr/learn/courses/30/lessons/120850?language=javascript# 

 

프로그래머스

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

programmers.co.kr

function solution(my_string) {
    let answer = [];
    my_string = [...my_string].map(str => parseInt(str)).filter(str => !isNaN(str))
    return my_string.sort();
}

일단 map으로 숫자로 변경해준 후 필터로 NaN이 아닌 값을 걸러줬다..........................

 

 

 

 

49. 가장 큰 수 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/120899

 

프로그래머스

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

programmers.co.kr

function solution(array) {
    return [Math.max(...array),array.indexOf(Math.max(...array))];
}
function solution(array) {
    let max = Math.max(...array)
    return [max,array.indexOf(max)];
}

변수 만드는 게 더 깔끔한듯......

 

 

 

50. 배열회전시키기

https://school.programmers.co.kr/learn/courses/30/lessons/120844

 

프로그래머스

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

programmers.co.kr

function solution(numbers, direction) {
    var answer = [];
    if (direction === "right") {
        answer.push(numbers[numbers.length-1])
        answer.push(...numbers.slice(0,numbers.length-1))
    } else {
        answer.push(...numbers.slice(1,numbers.length))
        answer.push(numbers[0])
    }
    return answer;
}

다른 사람 풀이

function solution(numbers, direction) {

    if ("right" == direction) {
        numbers.unshift(numbers.pop());
    } else {
        numbers.push(numbers.shift());
    }
    
    return numbers;
}

shift, unshift는 처음 본다.. 공부해야겠다

 

comment