본문 바로가기
코딩테스트

(javascript)음양더하기, 핸드폰 번호 가리기, 없는 숫자 더하기

by 어뇨 2024. 1. 16.
  • 문제 1. 음양더하기

    어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

제한사항.

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

풀이. 

function solution(absolutes, signs) {
    let answer = 0;

    for (let i = 0; i < absolutes.length; i++) {
            signs[i] ? answer += absolutes[i] : answer -= absolutes[i]
    }
    return answer;
}

 

제한사항을 보면 sign[i]가 참이면 양수, 그렇지 않으면 음수임을 의미한다라고 적혀있다.

그러면 absolutes의 모든 값을 for문을 사용해서 반복하게 하고
삼항연산자를 사용해서 참이면 +=, 거짓이면 -= answer에 더하고 빼게끔 했다.

다른사람의 풀이.

function solution(absolutes, signs) {

    return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}

reduce를 사용해서 val값에 참이면 1을 곱하고 거짓이면 -1을 곱해서 양수와 음수를 구분했다.

 

  • 문제 2. 핸드폰 번호 가리기 

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

 

  • phone_number는 길이 4 이상, 20이하인 문자열입니다.
function solution(phone_number) {
    let num = Array.from(phone_number);
var answer = '';
    for(let i = 0 ; i < num.length-4; i++){
    answer += '*'
}
let spl = num.splice(num.length-4, 4 )

    for(let i = 0 ; i < spl.length ; i++){
    answer += spl[i];    
}

    return answer;
}

 

우선 전화번호의 뒷 4자리를 제외한 나머지 숫자는 *처리가 되야 하기 때문에 for문을 사용해서 *값을 answer에 더하게 했다.

그리고 splice를 사용해서 배열의 나머지 뒷자리 숫자들로만 이루어진 배열을 또 만들었고

다시 for문을 사용해 그 숫자들을 answer에 더하는 식으로 했습니다.


다른사람의 풀이

function hide_numbers(s){
    var result = "*".repeat(s.length - 4) + s.slice(-4);
    return result;
  }

repeat을 이용해 뒷자리 4개를 제외한 나머지숫자를 *로 바꿨고, slice로 나머지 뒷자리 4개도 붙이는

아주쉽게 푸는 방법이 있었다.

 

  • 문제 3. 없는 숫자 더하기

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

 

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

 

function solution(numbers) {
    let answer = 0;

    for(let i = 0; i <= 9; i++) {
        if(!numbers.includes(i)) answer += i;
    }

    return answer;
}

 

for문을 사용해 0~9까지의 숫자를 반복하게 하고
논리부정연산자(!)를 사용해서 numbers의 값이 아닌 값을 includes(i)를 통해 찾고 그 값을 answer에 더 했습니다.

다른사람의 풀이

function solution(numbers) {
    return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}

 

역시 reduce를 이용해서 numbers의 합을 45에 뺴주는 식으로 풀었다.