FrontEnd :-)

[항해99] programmers 코딩테스트 연습문제 6~11 본문

항해99_7기/2주차 알고리즘 기초 주차 스터디

[항해99] programmers 코딩테스트 연습문제 6~11

code10 2022. 5. 14. 08:24

[항해99] 프로그래밍 기초 주차 / 달리기반 / 7기 / D반 / 9조

 

코딩테스트 연습문제

 

6. 없는 숫자 더하기

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

 제한사항

1 ≤ numbers의 길이 ≤ 9

0 ≤ numbers의 모든 원소 ≤ 9

numbers의 모든 원소는 서로 다릅니다.

(제출 답)

function solution(numbers) {
    let sum = 0;
    for (let i = 0; i < numbers.length; i++){ //반복문 for 이용해서
        sum += numbers[i] //numbers 값들 더하기
    }
    console.log(sum); // 생략..
    var answer = 0;
    for (let j = 0; j <= 9; j++){ //다시 반복문 for 이용해서 
        answer += j // 0~9 총 합 구하기 (답은 45여서, 45로 정의하면 수식은 더 간단할 수 있긴 하다)
    }
    return answer-sum; //없는 값 구하는 거니까, 총합에서 배열 내 값들 합 빼기
}

✅ 풀이 과정

 

🤼‍♀️다른 풀이

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

array.fill(value, start, end)

fill() fills specified elements in an array with a value.

const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.fill("Kiwi"); //Kiwi,Kiwi,Kiwi,Kiwi
fruits.fill("Kiwi", 2, 4); //Banana,Orange,Kiwi,Kiwi

 

⏩추가학습

let arr = [0, 1, 4, 6, 7]

//배열 내 숫자 총합 구하기 방법
//1. 반복문 이용
let sum = 0;
for(let i=0; i<arr.length; i++){
    sum += arr[i]
}
console.log(sum)

//2. reduce 함수 이용
console.log(arr.reduce((a,b)=>a+b))

 

7. 음양 더하기

(문제)

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

제한사항

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

(제출 답)

function solution(absolutes, signs) {
    var answer = 0;
    for (let i = 0; i < absolutes.length; i++){
    if ( signs[i] == true ){
        answer = answer + absolutes[i] // answer += absolutes[i] 로 줄일 수 있음
    } else {
        answer = answer - absolutes[i]
    }
}
    return answer;
}

✅ 풀이 과정

🤼‍♀️다른 풀이

function solution(absolutes, signs) {
    let answer = 0;
    absolutes.forEach((v, i) => {
        if (signs[i]) {
            answer += v;
        } else {
            answer -= v;
        }
    })
    return answer;
}

🤼‍♀️다른 풀이

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

⏩추가학습

 

8. 평균 구하기

(문제) 정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.

  • arr은 길이 1 이상, 100 이하인 배열입니다.
  • arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.

(제출 답)

function solution(arr) {
    var answer = 0; //배열의 첫 번째 값부터 따진다.
    for (const i of arr){ // 배열의 값 하나하나를 i라고 한 뒤 반복문인 for 문을 이용하여
        answer += i //값들을 더한다.
    }
    const avg = answer / arr.length //평균=합계/배열값들의 총 갯수(lengt)
    return avg;
}

✅ 풀이 과정

그나마 for 문의 기본 문제라 생각.

 

🤼‍♀️다른 풀이

function average(array){
  return array.reduce((a, b) => a + b) / array.length;
}

⏩추가학습

 

9. 핸드폰 번호 가리기

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

제한 조건

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

(제출 답)

✅ 풀이 과정

function solution(phone_number) {
    var answer = ''; //결과값을 문자열에 쌓는다
    for(let i = 0; i < phone_number.length; i++){
        if (i < phone_number.length -4){ //마지막 4자리 전까지는
            answer = answer + "*" // 개수 만큼 *로 치환 
        } else{ //그 외(마지막 4자리는)
            answer = answer + phone_number[i] //phone_number값으로 출력
        }
    }
    return answer;
}

 

🤼‍♀️  다른 풀이 1

function solution(phone_number) {
    var answer = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
    return answer;
}

🤼‍♀️  다른 풀이 2

function hide_numbers(s) {
  return s.replace(/\d(?=\d{4})/g, "*");
}

🤼‍♀️  다른 풀이 3 (2022.5.19. fill함수 이용해서 다시 풀어봄, fill 은 배열 함수여서 먼저 split 해야)

function solution(phone_number) {
    answer = phone_number.split('').fill("*", 0, -4).join('')
    return answer;
}

 

⏩추가학습 toString()

const phone_number = 3314529100
const str1 = (phone_number).toString(); //숫자를 문자열로 변환
 

10. 행렬의 덧셈

(문제)

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

(제출 답)

function solution(arr1, arr2) {
    var answer = [[]]; //배열 생성
    for (let i = 0; i < arr1.length; i++){
        answer[i] = []; // 초기화 
        for (let k = 0; k < arr1[i].length; k++){ //arr1 안 배열의 개수만큼 (바깥쪽만 돌리게..)
            answer[i].push(arr1[i][k] + arr2[i][k]) //각 행의 행끼리 더해주고 배열에 삽입, 다음값만 푸쉬
        }
    }
    return answer;
}

✅ 풀이 과정

// 단순하게 생각하면, arr1[i] + arr2[i] (for문 이용)
// 다시 배열로 만들어 준다(push)
let arr1 = [[1,2],[2,3]]
let arr2 = [[3,4],[5,6]]
let a = arr1.concat(arr2)
console.log(a) // [ [ 1, 2 ], [ 2, 3 ], [ 3, 4 ], [ 5, 6 ] ]

let b = [].concat(arr1, arr2)
console.log(b) // [ [ 1, 2 ], [ 2, 3 ], [ 3, 4 ], [ 5, 6 ] ]
 
concat()
array1.concat(array2, array3, ..., arrayX)
 
The concat() method concatenates (joins) two or more arrays.
The concat() method returns a new array, containing the joined arrays.
The concat() method does not change the existing arrays.

🤼‍♀️다른 풀이

return A.map((a,i) => a.map((b, j) => b + B[i][j]));

⏩추가학습

flat()
let arr1 = [[1,2],[2,3]]
 
let a = arr1.flat();
console.log(a) // [ 1, 2, 2, 3 ]
 

array.map(function(currentValue, index, arr), thisValue)
 
map() creates a new array from calling a function for every array element.
map() calls a function once for each element in an array.
map() does not execute the function for empty elements.
map() does not change the original array.

See Also:

The Array filter() Method

The Array forEach() Method

11.x만큼 간격이 있는 n개의 숫자

(문제)

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

제한 조건

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.

(제출 답)

function solution(x, n) {
    var answer = [];
    for (let i =1; i <= n; i++){
        answer.push(i*x)
    }
    return answer;
}

✅ 풀이 과정

 

🤼‍♀️다른 풀이

function solution(x, n) {
    return Array(n).fill(x).map((v, i) => (i + 1) * v)
}

⏩추가학습

Comments