[Js] 프로그래머스 prac5

이성규·2022년 11월 21일
0

✅ 핸드폰 번호 가리기✅🔷🔶

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

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

  • 입출력 예

phone_number	    return
"01033334444"	"*******4444"
"027778888"	     "*****8888"

🔷 풀이

function solution(phone_number) {
    const num = phone_number.length-4    
    return '*'.repeat(num) + phone_number.slice(-4)
}
// 뒤 4자리를 기준으로 앞의 번호들을 repeat()를 사용해 *처리해주고, slice()를 사용해 뒤의 4자리만 불러온다.

🔶 slice()

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
 
var arr1 = arr.slice(3, 5);			// [4, 5]
var arr2 = arr.slice(undefined, 5);		// [1, 2, 3, 4, 5]
var arr3 = arr.slice(-3);			// [8, 9, 10]
var arr4 = arr.slice(-3, 9);			// [8, 9]
var arr5 = arr.slice(10);			// []
var arr6 = arr.slice(4);			// [5, 6, 7, 8, 9, 10]
var arr7 = arr.slice(undefined);		// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var arr8 = arr.slice(5, -4);			// [6]
var arr9 = arr.slice(2, 15);			// [3, 4, 5, 6, 7, 8, 9, 10]

🔶 repeat()

repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다.

slice()나 정규식? 으로 풀어보는 방법도 있다고함.


✅ 행렬의 덧셈

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

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

  • 입출력 예

    arr1	        arr2	        return
[[1,2],[2,3]]	[[3,4],[5,6]]	[[4,6],[7,9]]
  [[1],[2]]	     [[3],[4]]	      [[4],[6]]

🔷 풀이

function solution(arr1, arr2) {
    let answer = [];
    // i가 0부터 arr1의 길이만큼 돌린 후 sum이라는 새로운 변수에 넣는다. 
    for (let i =0; i < arr1.length; i++) {
        let row  = [];
        // row이라는 새로운 변수에는
        // arr1의 i번째 인덱스의 j번째 요소와
        // arr2의 i번째 인덱스의 j번째 요소를 합한 것을 넣어준다.
        for(let j = 0; j < arr1[i].length; j++) {
            row.push(arr1[i][j] + arr2[i][j])
        }
        // 마지막으로 row을 answer에 넣어준다.
        answer.push(row)        
    }
    return answer;
}
  • 먼저 i를 0부터 arr1의 길이만큼 돌린 후 새로운 변수인 sum을 만들어 새로운 값을 넣어준다.
  • 여기서 새로운 값은 j를 0부터 arr1의 i번째 인덱스의 길이만큼 돌렸을 때 arr1의 i번째 안의 j번째 인덱스와 arr2의 i번째 안의 j번째 인덱스의 값을 더해준 것이다.
  • 최종적으로 얻은 row의 값을 answer에 넣어준다.

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

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

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

  • 입출력 예

x	n	answer
2	5	[2,4,6,8,10]
4	3	[4,8,12]
-4	2	[-4, -8]

🔷 풀이

function solution(x, n) {
    var answer = [];
    for (let i = 1; i<=n; i++){//i을 선언후 1을 할당하여 우리가 n개만큼 출력을 할거니 n이하로 반복하라는 뜻이며 이때 한번 반복한뒤 i는 1씩 증가
        answer.push(x*i);//push()를 알아두자
    }
    return answer;
}

✅ 부족한 금액 계산하기

  • 문제 설명
    새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
    놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
    단, 금액이 부족하지 않으면 0을 return 하세요.

  • 제한사항
    놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
    처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
    놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

  • 입출력 예

price	money	count	result
  3      20	      4	      10
  • 입출력 예 설명
    입출력 예 #1
    이용금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.

🔷 풀이

function solution(price, money, count) {
    let answer = 0;
    let total = 0

    for(let i = 1; i < count+1; i++){
        total += price*i;
    }
    answer = (total-money);
    return answer > 0 ? answer : 0;
}
profile
개발자를 위한 발걸음

0개의 댓글