[Programmers] 코딩테스트

[Day 17] 문자열, 수학, 조건문, 배열, 사칙연산

문무스 2022. 11. 8. 15:08

숫자 찾기

문제 설명:

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

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

findIndex 사용 작성한 코드: 

function solution(num, k) {
    var numStr = num.toString();  // 정수를 문자열로 변경하고
    var newArr = Array.from(numStr); // 문자열을 배열로 변경
    var kStr = k.toString(); // 정수를 문자열로 변경
    
    function findK(e){ // k와 같은 문자가 있는지를 확인하는 함수
        if(e === kStr) return true; // 만약 배열 중 k와 동일한 문자가 있으면 true 해당 인덱스 전달, 없으면 -1 전달
    }
    
    var findIndx = newArr.findIndex(findK); // 찾은 인덱스 값
    
    if(findIndx === -1){ // 확인 결과 동일한 문자가 없어서 -1로 전달된 경우
        return -1; // -1을 반환
      } else { // 그 이외의 경우(동일한 문자가 있어서 해당 인덱스 값이 전달되었다면)
          return findIndx + 1; // 인덱스 값 +1 반환
      }
    
}

includes 사용 작성한 코드: 

function solution(num, k) {
    var numStr = num.toString();  // 정수를 문자열로 변경하고
   
    if(numStr.includes(k)){ // numStr 이 k를 포함하고 있다면
        return numStr.indexOf(k) + 1; // numStr 내 k 인덱스에 +1 반환
    }   else { // numStr 이 k 를 포함하고 있지 않으면
        return -1; // -1 반환
    }
            
}

n의 배수 고르기

문제 설명:

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

제한사항:
  • 1 ≤ n ≤ 10,000
  • 1 ≤ numlist의 크기 ≤ 100
  • 1 ≤ numlist의 원소 ≤ 100,000

작성한 코드:

function solution(n, numlist) {
    var answer = [];
    var cnt = 0;
    
    while(cnt < numlist.length){ // numlist 배열의 길이만큼 돌려서 배열 내 모든 자료 확인
        if(numlist[cnt] % n === 0) { // 배열의 자료를 n으로 나눈 나머지가 0이면(배열의 자료가 n의 배수이면)
            answer.push(numlist[cnt]); // answer에 해당 배열의 자료를 넣기
        }
        cnt++;
    }
    return answer;
}

자릿수 더하기

문제 설명:

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

제한사항:
  • 0 ≤ n ≤ 1,000,000

작성한 코드:

function solution(n) {
    var answer = 0;
    var nStr = n.toString(); // 정수 n을 문자열로 변환하고
    var cnt = 0;
    
    while(cnt < nStr.length){ // 문자열 n의 길이만큼 돌때
        answer = answer + Number(nStr[cnt]); // answer에 문자열 n의 [cnt] 번째 값 누적해서 더하기
        cnt++;
    }
    
    return answer;
}

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
  • [연산자]는 + 와 - 중 하나입니다.

작성한 코드:

function solution(quiz) {
    var answer = [];
    var cnt = 0;
    var newArr =[];
    var sum = 0;
    
    while(cnt < quiz.length){
        // quiz 배열의 자료를 공백을 기준으로 나눠서 배열로 반환하고            
        newArr = quiz[cnt].split(' ');
        // 만약 인덱스 1이 + 이면 자료들을 더하고
        if(newArr[1] === '+'){
           sum = Number(newArr[0]) + Number(newArr[2]);
            // 그 값이 인덱스 4와 같으면 O를 배열에 추가, 다르면 X를 배열에 추가
            if(sum === Number(newArr[4])){
                answer.push('O');
            } else {
                answer.push('X')
            }
        }
        // 만약 인덱스 1이 - 이면 자료들을 빼는데
        else if(newArr[1] === '-'){
           sum = Number(newArr[0]) - Number(newArr[2]);
            // 그 값이 인덱스 4와 같으면 O를 배열에 추가, 다르면 X를 배열에 추가
             if(sum === Number(newArr[4])){
                answer.push('O');
            } else{
                 answer.push('X')
            }
        }
        cnt++;
    }
    
    return answer;
}

출처:

https://school.programmers.co.kr/

 

프로그래머스

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

programmers.co.kr