TIL_21.11.12

이서현·2021년 11월 12일
0

항해99

목록 보기
3/14
post-thumbnail

항해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;
}

다른 사람의 풀이를 보다 배운

map()

배열 내의 모든 요소 각각에 대하여 주어진 함수를
호출한 결과를 모아 새로운 배열을 반환

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부터 시작해 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를 리턴 거짓이면 토탈에서 머니 뺀 거 리턴
}

2016년

문제 보러가기

일단 윤년과 특정날짜 구하기를 검색해봤다

  • 윤년은 2월이 29일 까지 이다
  • 특정 날짜
    1월1일이 금요일이고 날수가 1입니다
    날수 1 %7을 하면 나머지는 1이 나오고
    금요일이라는 제한 조건에 맞춰 변수를 지정
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;
}

틀이 없어 더 쉽게 풀 수 있었던 것 같다

profile
🌿💻💪🧠👍✨🎉

0개의 댓글