프로그래머스

프로그래머스 19일차

ture403 2023. 6. 4. 12:38

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형

한 번만 등장한 문자

문제

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

정답풀이

function solution(s) {
    let ans = [];
    
    let sArr = s.split("");
    
    sArr.forEach((item) => {
        if(s.indexOf(item) === s.lastIndexOf(item)){
            ans.push(item);
        }
    })
    
    return ans.sort().join("");
}

초기화 부분에서는 빈 배열 result와 나누는 수인 divisor를 2로 설정합니다.
while 루프는 n이 2 이상인 동안 계속 실행됩니다.
if 문에서는 현재 n이 divisor로 나누어 떨어지는지 확인합니다. 나누어 떨어진다면 divisor는 n의 소인수이므로 result 배열에 추가하고, n을 divisor로 나눕니다.
else 문에서는 divisor를 1씩 증가시킵니다. 이는 소인수를 찾기 위해 나누는 수를 변경하는 과정입니다.
n이 2보다 작아지면 while 루프가 종료됩니다.
return 문에서는 중복된 값을 제거하기 위해 result 배열을 Set 객체로 변환한 후 다시 배열로 변환하여 반환합니다.

문자열 계산하기

문제

my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.

문제풀이

function solution(my_string) {
  const result = eval(my_string);
  return result;
}

 

위의 코드는 eval() 함수를 사용하여 문자열 my_string을 수식으로 계산한 결과를 반환합니다. eval() 함수는 주어진 문자열을 JavaScript 코드로 실행하여 결과를 반환하는 역할을 합니다.
예를 들어, my_string이 "3 + 5"로 주어졌을 경우, eval("3 + 5")는 8을 반환합니다.
주의: eval() 함수는 주어진 문자열을 실행하기 때문에 보안과 관련된 위험성이 있을 수 있으므로, 신뢰할 수 있는 소스에서만 사용해야 합니다.

OX퀴즈

문제

덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.


정답풀이

function solution(quiz) {
    var answer = [];
    return quiz.map(t => {
        const [calc, result] = t.split(' = ');
        const sign = calc.includes('+') ? 1 : -1
        const [a, b] = calc.split(sign === 1 ? ' + ' : ' - ');

        return +a + (+b * sign) === +result ? 'O' : 'X'
    });
}

빈 배열 answer를 선언합니다. 이 배열은 문제의 정답을 저장하기 위한 배열입니다. 하지만 해당 배열은 현재 코드에서는 사용되지 않습니다.

quiz.map()을 사용하여 quiz 배열의 각 요소에 대해 콜백 함수를 실행합니다.

콜백 함수 내에서는 현재 문제 t를 처리합니다.

t.split(' = ')를 사용하여 문제를 계산식과 결과로 분리합니다. 계산식은 calc 변수에, 결과는 result 변수에 할당됩니다.

calc.includes('+')를 사용하여 계산식에 덧셈 기호가 포함되어 있는지 확인합니다. 덧셈 기호가 포함되어 있다면 sign 변수에 1을 할당하고, 뺄셈 기호가 포함되어 있다면 -1을 할당합니다.

calc.split(sign === 1 ? ' + ' : ' - ')를 사용하여 계산식을 숫자와 연산자로 분리합니다. 숫자 a와 b에 각각 할당됩니다.

+a + (+b * sign) === +result를 사용하여 계산식의 결과와 주어진 결과를 비교합니다. 계산식의 결과와 주어진 결과가 동일하다면 'O'를 반환하고, 다르다면 'X'를 반환합니다.

map() 메서드에 의해 반환된 결과로 이루어진 배열이 최종적으로 반환됩니다.