기초부터 시작하는 코딩/Programmers

Programmers 문제를 풀어봅시다. Day22

kebab00 2023. 6. 7. 20:55

728x90

1. 자릿수 더하기

정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요

function solution(n) {
    let answer = 0;
    while(n > 0) {
        answer += n%10;
        n = Math.floor(n/10);
    }
    return answer;
}

- let answer = 0;: 초기에 answer 변수를 0으로 초기화합니다. 변수는 최종적으로 자리수의 합을 저장할 용도로 사용됩니다.

- while(n > 0) {: n 0보다 동안에 반복문을 실행합니다. n 자리수를 하나씩 줄여가며 자리의 값을 추출하는 사용됩니다.

- answer += n%10;: n 가장 오른쪽 자리수 값을 추출하여 answer 더합니다.

- n%10 n 10으로 나눈 나머지이므로 가장 오른쪽 자리수 값을 얻을 있습니다. 값을 answer 더함으로써 자리수의 합을 계속 누적합니다.

- n = Math.floor(n/10);: n 10으로 나누고 소수점 이하를 버림하여 다음 자리수를 추출합니다.

- 이렇게 하면 n 가장 오른쪽 자리수가 없어지고 왼쪽 자리수가 가장 오른쪽 자리수가 되는 것입니다.

- return answer;: 반복문이 종료되면 answer 변수에는 주어진 숫자 n 자리수의 합이 저장되어 있습니다.

- 이 값을 반환하여 결과를 출력합니다.

2. OX퀴즈

덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 

수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.

function solution(quiz) {
  for (let i = 0; i < quiz.length; i++) {
    let text = quiz[i].split(" ");
    let result =
      parseInt(text[0]) +
      parseInt(text[2]) * (text[1] === "+" ? 1 : -1);
    quiz[i] = result === parseInt(text[4]) ? "O" : "X";
  }
  return quiz;
}

- function solution(quiz) {: solution이라는 이름의 함수를 정의하고, quiz라는 매개변수를 받습니다. quiz 문자열 배열입니다.

- for (let i = 0; i < quiz.length; i++) {: for 반복문을 사용하여 quiz 배열의 요소에 접근합니다.

- 반복 변수 i 0부터 quiz.length까지 증가시키며 반복합니다.

- let text = quiz[i].split(" ");: quiz 배열의 요소인 문자열을 공백을 기준으로 분리하여 배열 text 저장합니다.

- text 배열은 연산식과 정답으로 구성됩니다.

- let result = parseInt(text[0]) + parseInt(text[2]) * (text[1] === "+" ? 1 : -1);: text 배열의 번째 요소와 번째 요소를 정수로 변환한 연산을 수행합니다.

- 연산자(text[1]) "+"이면 수를 더하고, "+" 아니면 번째 수에 -1 곱한 더합니다. 계산 결과를 result 변수에 저장합니다.

- quiz[i] = result === parseInt(text[4]) ? "O" : "X";: result text 배열의 다섯 번째 요소를 정수로 변환한 값이 같은지 비교합니다. - 같으면 quiz 배열의 현재 요소를 "O" 변경하고, 다르면 "X" 변경합니다.

3. OX퀴즈

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 

정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

function solution(n) {
    let arr = [];
    for(let i = 1; i <= n; i++) if(n % i === 0) arr.push(n / i);
    return arr.length % 2 ? 1 : 2;
}

- let arr = [];: 배열 arr 선언합니다. 배열은 n 약수를 저장할 용도로 사용됩니다.

- for(let i = 1; i <= n; i++): 1부터 n까지 반복문을 실행합니다. 반복 변수 i n 약수를 검사하기 위해 사용됩니다.

- if(n % i === 0) arr.push(n / i);: 만약 n i 나누어 떨어지면 (n i 약수라면), arr 배열에 n i 나눈 값을 추가합니다.

- 이렇게 하면 arr 배열에는 n 약수들이 저장됩니다.

- return arr.length % 2 ? 1 : 2;: arr 배열의 길이가 홀수인지 짝수인지 확인합니다. 

- 만약 arr 배열의 길이가 홀수라면 1 반환하고, 짝수라면 2 반환합니다.

- 이는 약수의 개수가 홀수인지 짝수인지에 따라 결과를 결정합니다.