항해99 4기 알고리즘 기초 문제 9번 부터 13번 까지 풀이😁
function solution(phone_number) {
let answer = '';
// 번호의 뒷 4자리만 필요
let remainder = phone_number.substring(phone_number.length-4, phone_number.length)
// 만약 4자리 이하인 경우를 위해 phone_number.length-4라고 지정
for(let i = 0; i < phone_number.length-4; i++){
answer += phone_number[i].replace(phone_number[i], '*')
}
return answer + remainder;
}
정규표현식으로도 풀이 가능
function solution(phone_number) {
return phone_number.replace(/\d(?=\d{4})/g, "*");
// \d: 모든 숫자 문자(0-9)와 일치, [0-9]와 동일
// (?=): 결과에 포함하지 않고 기본 표현식 뒤의 그룹을 찾기
// {4}: 기본 표현식 뒤의 그룹에 지정된 수량
// 정리: 숫자 찾고, 총 index에서 4개의 숫자가 있는지 확인하기
}
정규표현식테스트 해보기
정규표현식이 잘 정리되어 있는 블로그 가기
문제 보고 바로 떠오른 건 이중반복문!
[0,0]>[0,1]>[0,2]>[1,0]>[1,1].....
function solution(arr1, arr2) {
let answer = [];
for(let i = 0; i < arr1.length; i++){
// 출력값을 보면 배열안에 배열이 담겨져 있기 때문에 나온 값을 새 배열에 담기
let newArr = [];
for(let j = 0; j < arr1[i].length; j++){
newArr.push(arr1[i][j] + arr2[i][j])
}
answer.push(newArr)
}
return answer;
}
다른 사람의 풀이를 보다 배운
배열 내의 모든 요소 각각에 대하여 주어진 함수를
호출한 결과를 모아 새로운 배열을 반환
function solution(arr1, arr2){
return arr1.map((a,i) => a.map((b, j) => b + arr2[i][j]));
}
map이 이해가 안돼서 설명을 붙여봤다
function solution(arr1, arr2){
return arr1.map((a,index) => {
console.log(`나는 a의index${index}인${a}야`,
`나는 a의 index만큼 돌아가 지금은 index${index}야`)
return a.map((b, jndex) => {
console.log(`나는 b의index${jndex}인${b}야`,
`나는 b의 index만큼 돌아가 지금은 index${jndex}야`)
return b + arr2[index][jndex];});
});
}
// 0. 나는 a의index0인1,2야 나는 a의 index만큼 돌아가 지금은 index0야
// 0-0. 나는 b의index0인1야 나는 b의 index만큼 돌아가 지금은 index0야
// 0-1. 나는 b의index1인2야 나는 b의 index만큼 돌아가 지금은 index1야
// 1. 나는 a의index1인2,3야 나는 a의 index만큼 돌아가 지금은 index1야
// 1-0. 나는 b의index0인2야 나는 b의 index만큼 돌아가 지금은 index0야
// 1-1. 나는 b의index1인3야 나는 b의 index만큼 돌아가 지금은 index1야
x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 함
function solution(x, n) {
let answer = [];
for (let i = 1; i <= n; i++) {
answer.push(x*i)
}
return answer;
}
입출력 예
이용금액이 3인 놀이기구를 4번 타고 싶은 고객이
현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은
30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.
function solution(price, money, count) {
let total = 0;
for (let i = 0; i <= count; i++) {
total += price * i;
}
return money > total ? 0 : total - money;
// 머니가 더 커? 참이면 0를 리턴 거짓이면 토탈에서 머니 뺀 거 리턴
}
일단 윤년과 특정날짜 구하기를 검색해봤다
let date = [31,29,31,30,31,30,31,31,30,31,30,31];
let day = ['THU','FRI','SAT','SUN','MON','TUE','WED'];
좀 더 설명 하자면
2월1일은 날수가 32(1월1일~31일+2월1일)일이고 %7을 하면
나머지는 4이기 때문에 2월 1일은 '월요일',
그렇다면 5월 24일은 1월 부터 4월 까지 날수와
5월1일 부터 5월 24일까지 날수를 더해 %7를 해주기
function solution(a, b) {
let date = [31,29,31,30,31,30,31,31,30,31,30,31];
let day = ['THU','FRI','SAT','SUN','MON','TUE','WED'];
let temp = 0;
for(var i=0; i<a-1; i++){
temp += date[i];
}
temp += b;
let answer = day[temp%7]
return answer;
}
틀이 없어 더 쉽게 풀 수 있었던 것 같다