🎲 나머지가 1이 되는 수 찾기

💡 문제 설명

자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.

💡 제한 조건

  • 3 ≤ n ≤ 1,000,000



💡 기본 코드

function solution(n) {
    var answer = 0;
    return answer;
}

💡 정답 코드

function solution(n) {
    var answer = 0;
    for(let i=1; i<=n; i++)
        if(n%i===1) {
            answer = i;
            break;
        }
    return answer;
}

💡 문제 풀이

문제 푸는 과정

  1. n의 약수를 구하기 위해 반복문을 돌린다.
  2. 만약 반복문을 돌리던 중 나머지가 1이 되는 수를 발견하면 반복문을 멈춘다.

반복문은 n의 약수를 구하기 위해 사용한다. 약수의 최댓값은 자기자신이므로 n까지 반복문을 돌린다. 반복문은 1부터 커지므로 가장 작은 수는 제일 먼저 만나는 약수이다. 따라서 나머지가 1이 되면 즉시 반복문을 멈추고 해당 약수를 answer에 전달한다.


문제 링크 🔗 : 나머지가 1이 되는 수 찾기



🎲 없는 숫자 더하기

💡 문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

💡 제한 조건

  • 1 ≤ numbers의 길이 ≤ 9
    - 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.


💡 기본 코드

function solution(numbers) {
    var answer = -1;
    return answer;
}

💡 정답 코드

function solution(numbers) {
    var answer = 0;
    for(let i=0; i<=9; i++)
        answer+=i;
    for(let i of numbers)
        answer-=i;
    return answer;
}

💡 문제 풀이

문제 푸는 과정

  1. 0~9까지의 수를 더한다.
  2. numbers의 원소를 더한 값에서 뺀다.

없는 수의 합을 더하는 문제이기 때문에 0~9까지 더한 값에서 numbers의 값을 뺐다. numbers의 없는 값들의 합 = (0~9까지 더한 수) - (numbers의 값들의 합)이다.


문제 링크 🔗 : 없는 숫자 더하기



🎲 제일 작은 수 제거하기

💡 문제 설명

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

💡 제한 조건

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.


💡 기본 코드

function solution(arr) {
    var answer = [];
    return answer;
}

💡 정답 코드

function solution(arr) {
    var answer = [];
    let min = arr[0];
    for(let i=0; i<arr.length; i++){
        min = Math.min(min,arr[i]);
    }
    
    for(let i=0; i<arr.length; i++)
        if(arr[i] != min) answer.push(arr[i]);
    if(answer.length == 0) answer.push(-1);
    return answer;
}

💡 문제 풀이

문제 푸는 과정

  1. 제일 작은 값을 구한다.
  2. 제일 작은 값을 제외한 수를 담는다.
  3. 만약 제일 작은 수를 제외하고 값이 없다면 -1을 담는다.

먼저 이 문제를 풀 때 내가 시간을 낭비했던 부분은 단순히 제일 작은 수 하나를 제거하는 것이 아니라 제일 작은 수가 여러 개일 때는 모두 제거해줘야 한다는 부분이었다. 이 부분을 유의하면서 풀어야 한다.
제일 작은 수를 찾기 위해 Math.min을 사용한다. 제일 작은 값을 찾았다면 if문을 통해 min과 다른 값일 때만 배열에 값을 넣는다.


문제 링크 🔗 : 제일 작은 수 제거하기



🎲 핸드폰 번호 가리기

💡 문제 설명

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

💡 제한 조건

  • phone_number는 길이 4 이상, 20이하인 문자열입니다.


💡 기본 코드

function solution(phone_number) {
    var answer = '';
    return answer;
}

💡 정답 코드

function solution(phone_number) {
    var answer = '';
    let len = phone_number.length;
  
    for(let i=0; i<len-4; i++)
        answer+='*';
    for(let i=len-4; i<len; i++)
        answer+=phone_number[i];
    return answer;
}

💡 문제 풀이

문제 푸는 과정

  1. 뒤의 4자리를 제외한 앞부분의 번호를 *로 바꾼다.
  2. 뒤의 4자리의 번호를 *로 바꾼 문자열에 더한다.

전화번호에서 뒤의 4자리를 제외하고 로 만들어주기 위해 문자열 길이에서 4를 뺀 만큼 반복문을 돌린다. 반복되는 횟수만큼 을 더해주면 뒷자리를 제외한 앞부분이 *로 바뀐다. 그다음 뒤의 4자리를 원래 전화번호로 붙이기 위해 반복문을 뒤에서 4자리를 뺀 만큼 시작하여 끝까지 돌린다. 그리고 해당되는 번호를 붙인다.


문제 링크 🔗 : 핸드폰 번호 가리기



🎲 자릿수 더하기

💡 문제 설명

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

💡 제한 조건

  • N의 범위 : 100,000,000 이하의 자연수


💡 기본 코드

function solution(n)
{
    var answer = 0;

    // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
    console.log('Hello Javascript')

    return answer;
}

💡 정답 코드

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

    return answer;
}

💡 문제 풀이

문제 푸는 과정

  1. n을 뒷자리부터 하나씩 잘라 더한다.
  2. n의 자릿수를 변경한다.
  3. n이 더이상 나눠질 수 없을 때까지 1,2를 반복한다.

n을 뒷자리부터 하나씩 가져오기 위해 나머지를 구한다. %10을 한 나머지는 맨 뒷자리 값이 된다. 자리를 한칸 앞으로 옮기기 위해 10을 나눠준다. Math.floor를 사용하여 나눌 때 소숫점이 나오면 버린다.


문제 링크 🔗 : 자릿수 더하기



profile
헐 제가 회사를 다니면서 개발을 하고 있어요 이게 무슨 일이죠?

0개의 댓글