ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL DAY 2 22-07-16
    TIL 2022. 7. 16. 22:00

     

     

     

    -오늘이 복날이라 치킨먹는 친구를 섭외해봤다-

     

     

    황금같은 토요일 오늘도 어김없이 

    알고리즘을 풀었다.

     

    그래도 한번 풀어봤다고 점점

    유형파악을 하는 것이나

    구글링 하는 법

    그리고 특히나 

    for문과 친해진 것 같다 ^^

    어째 이제는

    알고리즘을 보면 for문부터 생각하는 것 같다

     

    오늘도 팀원들과 함께 각자 문제풀고

    서로한테 풀이를 설명해주며

    스터디그룹과 같이

    좋은 분위기로 공부해서 만족스럽다.

     

    그리고 즐거웠다. 

    공부를 하고 작업을 하면서 느끼는 건 

    오래 고민한 분야답게

    적성에 맞다고 생각한다. 

     

     

     


    ※참고로 문제는 프로그래머스 문제


    *오늘 풀었던 문제들 목록

    7. 음양 더하기

    8. 평균값 구하기

    9. 핸드폰 번호 가리기

    10.행렬의 덧셈

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

    12.부족한 금액 계산하기

    *사용 언어: 자바 스크립트


     

    7. 음양 더하기

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

     

    예시: 입력 5, 3 

    출력:

    • 내 코드
    function solution(absolutes, signs) {
        let a = 0
        for (i=0; i<signs.langth; i++){
            if(signs[i]=true){
                +(absolutes[i])
            }
            else{
                -(absolutes[i])
            }
            a += absolutes[i]
        }
        return a
    }
    • 정답 코드
    function solution(absolutes, signs) {
        let answer = 0;
        for (let i = 0; i < absolutes.length; i++) {
            if (signs[i] === true) {
                answer = answer + absolutes[i];
            } else {
                answer = answer - absolutes[i];
            }
        }
        return answer
    }

     


    8. 평균 구하기

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

     

    • 내 코드 (이건 왜 답이 아닌지 모르겠다.)
    let arr = [1,2,3,4]
    var answer = 0;
    function solution(arr) {
        for(let i = 0; i < arr.length; i++){
            answer += arr[i];
        }
        return answer
    }
     answer / arr.length;
    • 정답 코드
    let arr = [1,2,3,4]
    var answer = 0;
    function solution(arr) {
        for(let i = 0; i < arr.length; i++){
            answer += arr[i];
        }
        return answer;  answer / arr.length;
    }

    re


     

    9. 핸드폰 번호 가리기

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

    • 내 코드: 는 없다... 수학적 접근으로 노트에 s.length를 2로 나눠서 무얼 한다 까지는 접근했지만 어떤 함수를 써야할 지 모르겠어서 함수를 찾아보다 답변을 봐버렸다..;
    • 정답코드
    function solution(phone_number) {
        var answer = '';
        var star = phone_number.replace(/[0-9]/gi,'*')
        var a = star.substr(0, star.length - 4)
        var b = phone_number.slice(-4)
        var dap =answer.concat(a,b)
        
        
        return dap;
    }

    나이스

    느낀 점:  그래도 이걸 알게되서 다행이었고 팀원들과 공유한 점이 잘했다고 생각한다.

     

     


     

     

    10. 행렬의 덧셈

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

    • 내 코드

    는 하다가 지워버렸다 짜다가 뇌에 과부하 걸려서 포맷한것이나 다름없다

    접근 방법 : let arr1= [[1,2],[2,3]]

                      let arr2 = [[3,4],[5,6]]

    이 경우 arr1[0][0] +arr2[0][0]이 가능한지를 살펴보는데

    arr1[[0]]+arr2[[0]]이런식으로 합쳐봐서 안되는줄 알았다 /// 아주 멍청한 실수를 저질렀다.

    이중 포문이 필요하다는 생각과 저런식으로 빠져나와서 합쳐지면 잘 만들 수 있지 않았을까 싶다. 

    아쉽 ㅠ

                          

    • 정답코드
    function solution(arr1, arr2) {
        let answer = [];
        
        for(let i=0; i<arr1.length; i++){ //[1,2][2,3]
            let sum = []; 
            for(let j=0; j<arr1[i].length; j++){ //arr1 안의 배열의 길이 (2번)
                sum.push(arr1[i][j] + arr2[i][j]) // 1번째 1+3, 2번째 2+4 / 3번째 2+5 4번째 3+6
            }
            answer.push(sum) // [4,6],[7,9]
        }
        return answer;
    }

    *느낀 점 : 현재 풀고있는 문제들이 for문 활용이 많은데 자주 사용해서 익숙해져야 할 것 같다.

     


     

     

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

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

    • 내 코드
    function solution(x, n) {
        var answer = [];
        var a = 0;
        for (let i=0; i<=n-1; i++){
            if(Math.sign(x)==1){
                a = a + x;
                answer.push(a)
            }
            else{
                a = a - x;
                answer.push(a)
            }
        }
        return answer;
    }
    • 정답 코드
    function solution(x, n) {
        var answer = [];
        for (let i = 1; i<=n; i++){
            answer.push(x*i);
        }
        return answer;
    }

    아쉬운점 : 음수일 경우를 제대로 고려하지 않았다. 간결하게 만들 수 있었는데 아쉽다.

     


     

     

    12. 부족한 금액 계산하기

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

    • 단! 을 안보고내 답변 이걸 안보고 왜 정답이 아닌거지? 라고 100번은 생각했다. 컴퓨터 언어를 익히면서 사람언어를 까먹나보다. 그리고 if문을 생각했는데 다른 분들의 답변에선 true? (맞으면)a : (아니면) b 이런 짧은 코드를 사용하셔서 새로웠다.

    의도 = 

    var answer = 0
    
    function solution(price, money, count) {
        for (i=1; i <= count; i++){
            answer += price * i ;
        } 
        return answer = answer - money ;
    }
    • 정답1
    var answer = 0
    
    function solution(price, money, count) {
        for (i=1; i <= count; i++){
            answer += price * i ;
        }
        return money > answer ? 0 : answer-money
    }
    • 정답2 :가우스 형식 (이것 또한 한번 알아보자!)
    function solution(price, money, count) {
      const tmp = (price * count * (count + 1)) / 2 - money;
      return tmp > 0 ? tmp : 0;
    }

    아쉬웠던 점 : 문제를 제대로 읽지 못한 것.

    배운 것 : 간단한 if문의 새로운 형식 // 문법 : //

    연산자 우선순위 규칙에 따라, 비교 연산 'age > 18'이 먼저 실행됩니다. // (조건문을 괄호로 감쌀 필요가 없습니다.) let accessAllowed = age > 18 ? true : false;

     

    'TIL' 카테고리의 다른 글

    TIL DAY6 220724 리액트 입문주차 2  (0) 2022.07.24
    TIL DAY5 220723 리액트 입문 시작  (0) 2022.07.24
    TIL DAY 4 220719  (0) 2022.07.19
    TIL DAY 3 220718 알고리즘  (0) 2022.07.19
    TIL DAY 1 22-07-15  (0) 2022.07.16
Designed by Tistory.