문제9
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.제한 조건
- s는 길이 4 이상, 20이하인 문자열입니다.
나의 코드)
function solution(phone_number) {
var answer = '';
b=phone_number.slice(-4,phone_number.length)
c=phone_number.slice(0,phone_number.length-4)
answer='*'.repeat(c.length)+b
return answer;
}
나의해설)
이 문제의 핵심은 .slice(a,b)라는 자바스크립트 내장함수에 있다.
slice(a,b)는 배열의 a번째부터 b번째의 바로 앞까지를 의미한다.
let Arr1=['딸기','당근','수박','참외','메론']
console.log(Arr1)//['딸기','당근','수박','참외','메론']
console.log(Arr1.slice(2,4))//['수박','참외']
console.log(Arr1.slice(-1,5))//['메론']
console.log(Arr1.slice(-2,5))//['참외','메론']
console.log(Arr1.slice(-3,5))//['수박','참외','메론']
console.log(Arr1.slice(-4,5))//['당근','수박','참외','메론']
console.log(Arr1.slice(-5,5))//['딸기','당근','수박','참외','메론']
slice()안에 -를 넣으면 끝값부터 거꾸로 배열을 불러낼 수 있는데 console.log를 돌려서 어떻게 나오는지 확인을 해본다.
slice(-4,Arr1.length)를 넣으면 배열의 맨 끝부터 4개 만을 의미하고, 이를 b라는 함수에 저장한다. c는 배열에서 b만큼을 제외한 나머지 부분으로서 slice.(0,Arr1.length-4)로 설정하면, 처음부터 맨마지막부터 네번째 값의 바로 앞까지 지정할 수 있다. '*'를 c만큼 repeat한 뒤 b값을 뒤에 붙여주면, 맨 마지막 4부분만 글자가 남아있고, 그 앞부분들은 모두 *로 변환된다.
문제10
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다
나의코드)
function solution(arr1, arr2) {
var answer = [[]];
for(i=0;i<arr1.length;i++){
answer[i]=[];
for(j=0;j<arr1[i].length;j++){
answer[i].push(arr1[i][j]+arr2[i][j])
}
}
return answer;
}
나의풀이)
for문 안에 다시 한 번 for문을 넣은 코드이다. 우선 var answer=[[]];는 문제 자체에서 주어지는데, 배열안에 배열이 들어올 것이라는 것을 암시한다. 실제로 arr1과 arr2는 [2,3],[3,4]와 같이 들어오고, answer에는[[5,7]]처럼 담길 것이다.
문제 조건에서 arr1과 arr2의 길이는 같을 수 밖에 없다고 했기 때문에 첫번째 for문에서 arr1.length대신에 arr2.length를 끝값으로 설정해도 무방하다. answer[i]=[];로 설정하여 i가 하나씩 증가함에 따라 빈 배열을 계속 추가할 것이고, arr1의 개수=arr2의 개수만큼 빈 배열이 증가하게 될 것이다. 그리고 빈 배열이 하나씩 생길 떄 마다, 각 빈 배열의 안에 arr1[i][j]+arr2[i][j]를 계산한 값을 밀어 넣는다.
.arr1과 arr2를 각각 [[1,2]],[[3,4]]과 [[5,6],[7,8]] 라고 가정해보자.
첫번쨰로 i=0일때 첫번쨰 for문에 따라 answer[0]=[]이기 떄문에 처음의 [[]]상태 그대로이다. 이 때 두번째 for문에 따라빈 배열의 값에arr1[0][0]+arr2[0][0]을 넣는데 이는 1+5으로 6이다. 이때 answer의 상태는 [[6]]이다. 다시 두번째 for문에 따라 이번에는 arr1[0][1]+arr2[0][1]의 값(2+6)이 answer[0]에 추가되고 이때 answer의 상태는[[6,8]]이 된다. 다시 첫번쨰 for문으로 돌아가 answer[1]=[]값이 실행됨에 따라 빈 배열을 추가한다. 이 때 answer의 상태는[[6,8],[]]이 된다. 다시 두번째 for문에 의해 answer[1]인 빈 배열의 값에 arr1[1][0]+arr2[1][0]을 계산한 값(3+7)을 밀어넣는다. 이때 answer의 상태는 [[6,8],[10]]이다. 다시 두번쨰 for문에 의해 arr1[1][1]+arr2[1][1]을 계산한 값(4+8)을 밀어넣고 이떄 answer의 상태는 [[6,8],[10,12]]가 된다. arr1과 arr2의 배열의 길이가 2이기 때문에 for문은 여기서 종료하고 return answer=[[6,8],[10,12]]가 된다.
문제11
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
제한 조건
- x는 -10000000 이상, 10000000 이하인 정수입니다.
- n은 1000 이하인 자연수입니다.
나의 코드
function solution(x, n) {
var answer = [];
for(i=1;i<n+1;i++){
let sum=1;
sum=x*i
answer.push(sum)
}
return answer;
}
나의 풀이
sum을 랜덤하게 설정을 해준뒤, for문을 돌린다. 이때 i의 값을 1부터 시작하게해서 n까지 실행될수 있도록한다. 즉 만약 n이 5라면 i가 1,2,3,4,5와 같은 형태로 5번 반복되게 한다. x의 값과 i의 값이 곱해진 값을 sum이라는 변수에 할당하고 그 값을 answer라는 배열에 밀어넣으면 된다.
문제12
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 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는 자연수
나의코드
function solution(price, money, count) {
let totalPrice = 0;
let answer=''
for(let i=1;i<=count;i++){
totalPrice = totalPrice+price * i;
}
if(money > totalPrice)
{answer= 0
}else{ answer=totalPrice-money}
return answer
}
나의풀이
for문에 의해 처음 입장할 때의 내가 내야할 입장료는 price*1로 price가 되고 totalprice는 이전의 price의 총합이 된다.
total price =price+price*2+price*3...price*count가 된다.
만약(money>totalPrice)이면 문제에서 0을 반환해라했기 떄문에 answer는 0이 된다. 반대의 경우에는 부족한 돈을 반환하면 되기 때문에 answer=totalPrice-money값이 된다
'알고리즘' 카테고리의 다른 글
프로그래머스 자바스크립트 알고리즘 스터디[문25~문28] (0) | 2022.03.14 |
---|---|
프로그래머스 자바스크립트 알고리즘 스터디 [문21~문24] (0) | 2022.03.14 |
프로그래머스 자바스크립트 알고리즘 스터디 [문17~문20] (0) | 2022.03.14 |
프로그래머스 자바스크립트 알고리즘 스터디 [문13~문16] (0) | 2022.03.12 |
프로그래머스 자바스크립트 알고리즘 스터디 [문1~문8] (0) | 2022.03.12 |