코딩 공부/코딩테스트

자바스크립트 코딩테스트 입문 (17)

천서리 2023. 6. 1. 20:23
QUOTE THE DAY

“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”

- 이글슨 (Eagleson)
반응형

코딩테스트 입문 Day 17 문자열, 수학, 조건문, 배열, 사칙연산

출처 : https://programmers.co.kr/

 

프로그래머스

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

programmers.co.kr


숫자찾기

문제

정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

 

 

제한사항

  • 0 < num < 1,000,000
  • 0 ≤ k < 10
  • num에 k가 여러 개 있으면 가장 처음 나타나는 자리를 return 합니다.

 

입출력 예

num k result
29183 1 3
232443 4 4
123456 7 -1

 

입출력 예 설명

 

입출력 예 #1

  • 29183에서 1은 3번째에 있습니다.

입출력 예 #2

  • 232443에서 4는 4번째에 처음 등장합니다.

입출력 예 #3

  • 123456에 7은 없으므로 -1을 return 합니다.

 

solution.js

function solution(num, k) {
    var numStr = num.toString();
    for (var i = 0; i < numStr.length; i++) {
        if (Number(numStr[i]) === k) {
            return i + 1;
        }
    }
    return -1;
}
  1. 주어진 수 num을 문자열로 변환한 후 numStr 변수에 저장합니다. 이는 num을 문자열로 바꿈으로써 각 자리의 숫자에 접근하기 위함입니다.
  2. 반복문을 사용하여 numStr의 각 문자(숫자)를 하나씩 확인합니다. i 변수는 현재 확인하고 있는 문자(숫자)의 인덱스를 나타냅니다.
  3. 반복문 안에서는 Number(numStr[i])를 통해 문자(숫자)를 숫자로 변환한 후, k와 비교합니다. 이때, === 연산자를 사용하여 값과 타입이 동일한지 비교합니다.
  4. 만약 현재 확인 중인 숫자가 k와 동일하다면, 해당 숫자가 처음으로 등장하는 위치를 나타내는 인덱스를 반환합니다. 인덱스는 0부터 시작하므로, i + 1을 반환합니다.
  5. 반복문을 모두 순회했음에도 불구하고 k를 찾지 못한 경우, -1을 반환합니다.

테스트 결과

console.log(solution(29183, 1)); // 3
console.log(solution(232443, 4)); // 4
console.log(solution(123456, 7)); // -1

 


n의 배수 고르기

문제

정수 n과 정수 배열 numlist가 매개변수로 주어질 때, numlist에서 n의 배수가 아닌 수들을 제거한 배열을 return하도록 solution 함수를 완성해주세요.

 

 

제한사항

  • 1 ≤ n ≤ 10,000
  • 1 ≤ numlist의 크기 ≤ 100
  • 1 ≤ numlist의 원소 ≤ 100,000

 

입출력 예

n numlist result
3 [4, 5, 6, 7, 8, 9, 10, 11, 12] [6, 9, 12]
5 [1, 9, 3, 10, 13, 5] [10, 5]
12 [2, 100, 120, 600, 12, 12] [120, 600, 12, 12]

 

입출력 예 설명

 

입출력 예 #1

  • numlist에서 3의 배수만을 남긴 [6, 9, 12]를 return합니다.

입출력 예 #2

  • numlist에서 5의 배수만을 남긴 [10, 5]를 return합니다.

입출력 예 #3

  • numlist에서 12의 배수만을 남긴 [120, 600, 12, 12]를 return합니다.

 

solution.js

function solution(n, numlist) {
    var answer = [];
    for (var i = 0; i < numlist.length; i++) {
        if (numlist[i] % n === 0) { 
            answer.push(numlist[i]);
        }
    }
    return answer;
}
  1. 결과를 저장할 빈 배열 answer를 선언합니다.
  2. 반복문을 사용하여 numlist의 각 요소를 하나씩 확인합니다. i 변수는 현재 확인하고 있는 요소의 인덱스를 나타냅니다.
  3. 반복문 안에서는 numlist[i] % n을 통해 현재 요소를 n으로 나눈 나머지를 계산합니다. 만약 나머지가 0이라면, 해당 숫자는 n의 배수입니다.
  4. numlist[i] % n === 0 조건이 참인 경우, 해당 숫자를 결과 배열인 answerpush 메서드를 사용하여 추가합니다.
  5. 모든 요소를 확인하고 나서는 결과 배열 answer를 반환합니다.

테스트 결과

console.log(solution(3, [1, 2, 3, 4, 5, 6])); // [3, 6]
console.log(solution(2, [10, 11, 12, 13, 14, 15])); // [10, 12, 14]
console.log(solution(5, [20, 25, 30, 35, 40])); // [20, 25, 30, 35, 40]

자릿수 더하기

문제

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

 

 

제한사항

  • 0 ≤ n ≤ 1,000,000

 

입출력 예

n result
1234 10
930211 16

 

입출력 예 설명

 

입출력 예 #1

  • 1 + 2 + 3 + 4 = 10을 return합니다.

입출력 예 #2

  • 9 + 3 + 0 + 2 + 1 + 1 = 16을 return합니다.

 

solution.js

function solution(n) {
    var numStr = n.toString();
    var answer = 0;
    for (var i = 0; i < numStr.length; i++) {
        answer += Number(numStr[i]);
    }
    return answer;
}
  1. 주어진 수 n을 문자열로 변환한 후 numStr 변수에 저장합니다. 이는 n을 문자열로 바꿈으로써 각 자리의 숫자에 접근하기 위함입니다.
  2. 결과를 저장할 변수 answer를 0으로 초기화합니다.
  3. 반복문을 사용하여 numStr의 각 문자(숫자)를 하나씩 확인합니다. i 변수는 현재 확인하고 있는 문자(숫자)의 인덱스를 나타냅니다.
  4. 반복문 안에서는 Number(numStr[i])를 통해 문자(숫자)를 숫자로 변환한 후, answer에 더합니다. 이를 통해 각 자리의 숫자를 모두 더할 수 있습니다.
  5. 모든 자리의 숫자를 확인하고 나서는 최종적으로 계산된 answer 값을 반환합니다.

테스트 결과

console.log(solution(1234)); // 10
console.log(solution(930211)); // 16

OX퀴즈

문제

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

 

 

제한사항

  • 연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
  • 1 ≤ quiz의 길이 ≤ 10
  • X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
  • X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
  • -10,000 ≤ X, Y ≤ 10,000
  • -20,000 ≤ Z ≤ 20,000
  • [연산자]는 + 와 - 중 하나입니다.

 

입출력 예

n result
["3 - 4 = -3", "5 + 6 = 11"] ["X", "O"]
["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"] ["O", "O", "X", "O"]

 

입출력 예 설명

 

입출력 예 #1

  • 3 - 4 = -3 은 틀린 수식이므로 "X", 5 + 6 = 11 은 옳은 수식이므로 "O" 입니다. 따라서 ["X", "O"]를 return합니다.

입출력 예 #2

  • 19 - 6 = 13 은 옳은 수식이므로 "O", 5 + 66 = 71 은 옳은 수식이므로 "O", 5 - 15 = 63 은 틀린 수식이므로 "X", 3 - 1 = 2는 옳은 수식이므로 "O" 따라서 ["O", "O", "X", "O"]를 return합니다.

 

solution.js

function solution(quiz) {
    var answer = [];
    for (var i = 0; i < quiz.length; i++) {
        var equation = quiz[i].split(' ');
        var X = parseInt(equation[0]);
        var operator = equation[1];
        var Y = parseInt(equation[2]);
        var Z = parseInt(equation[4]);
        
        var result;
        if (operator === '+') {
            result = X + Y;
        } else if (operator === '-') {
            result = X - Y;
        }
        
        if (result === Z) {
            answer.push("O");
        } else {
            answer.push("X");
        }
    }
    return answer;
}
  1. 결과를 저장할 빈 배열 answer를 선언합니다.
  2. 반복문을 사용하여 quiz의 각 요소를 하나씩 확인합니다. i 변수는 현재 확인하고 있는 요소의 인덱스를 나타냅니다.
  3. 반복문 안에서는 현재 퀴즈의 수식을 공백을 기준으로 분리합니다. split(' ') 메서드를 사용하여 수식을 분리하고, 분리된 요소들을 각각 X, operator, Y, Z 변수에 저장합니다.
  4. XY는 문자열로 되어 있는 숫자를 parseInt 함수를 사용하여 정수로 변환합니다. Z도 동일하게 정수로 변환합니다.
  5. 수식을 계산하여 결과를 저장할 변수 result를 선언합니다. operator에 따라 +- 연산을 수행합니다.
  6. 계산된 resultZ를 비교하여 정답 여부를 판단합니다. 만약 resultZ가 동일하다면, 정답이므로 결과 배열인 answer"O"를 추가합니다. 그렇지 않으면, 오답이므로 "X"를 추가합니다.
  7. 모든 퀴즈에 대해 처리한 후, 결과 배열 answer를 반환합니다.

테스트 결과

console.log(solution(["3 - 4 = -3", "5 + 6 = 11"])); // ["X", "O"]
console.log(solution(["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"])); // ["O", "O", "X", "O"]

 

반응형
Adventure Time - BMO