ABOUT ME

끝없는 성장을 꿈꾸는 개발자 velog

Today
Yesterday
Total
  • TIL DAY 1 22-07-15
    TIL 2022. 7. 16. 02:47

    sd

    먼저 본격적인 TIL 작성을 자축하며 글을 열어보자!

     

    현재는 항해99의 부트캠프에 참여중이며

    나름 잘 버티고 있다고 생각한다.

     

    오늘부터 새로운 팀원들과 함께하게 된것은

     

    알 . 고 . 리 . 즘 

     

    전에 공부를 했던 분들은 달리기 반

    개발자 유치원생인 나는 걷기 반

    같은 조의 팀원 또한 마찬가지다

     

    이제 항해에서 뿌려주는 상대적으로 난이도 '하'~'중'

    정도의 난이도를 풀어보고 각자 설명할 문제를 정해서 팀원들에게 설명까지해보는게 공부방법이었는데이번 조의 팀원분들이 착실히 본인 맡은 바를 수행해주셔서 좋았다.

     

    오늘은 알고리즘 문제들을 자바스크립트를 이용하여 풀어보았기 때문에오늘의 목표,풀었던 문제들,작성한 코드,잘 됐던 것,어려웠던 점,막혔을때 했던 노력 순으로 정리해보려 한다.


    ※참고로 문제는 프로그래머스 문제들이었다.

     

     


    *오늘 풀었던 문제들 목록

    1. 직사각형 별찍기
    2. 짝수와 홀수
    3. 가운데 글자 가져오기
    4. 두 정수 사이의 합
    5. 문자열을 정수로 바꾸기
    6. 없는 숫자 더하기

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


     

    1. 직사각형 별찍기

    - 별 문자 '*'이 문자로 가로의 길이가 n , 세로의 길이가 m인 직사각형 형태를 출력해보세요.

    예시: 입력 5, 3 

    출력:

    *****
    *****
    *****
    • 내 코드
    print('*'.repeat(5)
    print('*'.repeat(5)
    print('*'.repeat(5)
    • 정답 코드
    process.stdin.setEncoding('utf8');
    process.stdin.on('data', data => {
        const n = data.split(" ");
        const a = Number(n[0]), b = Number(n[1]); 
        
        const row = "*".repeat(a)
        for(let i = 0; i < b; i++) { 
            console.log(row);
        }
    });

    에러 :이런 문제푸는 것이 처음이라 예시대로 만드는 것인줄 알았다 ㅎㅎ 아주 부끄럽구만

    배운 것: 

    Number()은 문자열을 숫자로 변환하는 함수

     

    느낀 점: 그리고 답변을 찾아보다가 느낀거지만 프로젝트로 구현은 해봤지만  구글링과 소스코드 활용이었어서 문법을 알아야 풀 수 있고 문제를 보고 어떤 유형인지를 알 수 있을 것 같다.

     


    2. 짝수와 홀수

    정수 num이 짝수일 경우 "Even"을 반환하고 홀수 인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.

     

    • 내 코드
    function solution(num) {
        if(parseInt(num) % 2 == 0){
            return 'Even';}
        else{
            return 'Odd';}
    }

    정답이므로 통과


     

    3. 가운데 글자 가져오기

    단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

    • 내 코드: 는 없다... 수학적 접근으로 노트에 s.length를 2로 나눠서 무얼 한다 까지는 접근했지만 어떤 함수를 써야할 지 모르겠어서 함수를 찾아보다 답변을 봐버렸다..;
    • 정답코드
    function solution(s) {
        if(s.length%2==0){
            return s.substr(s.length/2-1,2)
        }
        else{
            return s.substr(s.length/2,1)
        }
    }

    에러: 내 뇌세포에 에러

    배운 것: 찾아보니 substr(a,b)라는 함수를 쓰면 쉽게 해결할 수 있는 문제였다 

      substr(a,b) 이 함수는 (a라는 자열 위치, 그 위치부터 b개의 문자를 출력)

      이라는 뜻을 가진 함수였다.

     

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

     

     

    4. 두 정수 사이의 합

    두 정수 a,b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solutuin을 완성하세요

    예를 들어 a=3, b=5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 

    • 내 코드:
    let answer = 0
    
    function solution(a,b) {
        if(a <=b){
           for(let i = a; i<= b; i++) {
                let answer = answer i;      
            } 
        }else{    
            for(let i = b; i<= a; i++) {
                answer += i;      
            }
        }
        return answer;
    }
    • 정답 코드:
    let answer = 0
    
    function solution(a,b) {
        if(a <=b){
           for(let i = a; i<= b; i++) {
                answer += i;      
            } 
        }else{    
            for(let i = b; i<= a; i++) {
                answer += i;      
            }
        }
        return answer;
    }

    에러: SyntaxError: Unexpected identifie답변을 찾아보니 answer +=  i; 로 표현해주야 했다

          저렇게 썼던 이유는 제일 처음에 입문했던 것이 파이썬이라 그 때 배웠던 기억으로 표현했는데 문법 에러가 발생했다 ㅠ 진짜 문법을 제대로 알면 2배는 속도가 붙을듯하다.

        

     

    배운 것: 그래도 저게 안되는 이유는 잘 모르겠다. 

     

    느낀 점:  이 것 역시 문법공부 동기부여

     

     

     

    5. 두 정수 사이의 합 

    문자열 s를 숫자로 변환한 결과를 반환하는 함수, solutuin을 완성하세요.

    제한 조건 

     - s의 길이는 1 이상 5입니다.

     - s의 맨앞에는 부호(+,-)가 올 수 있습니다.

     - s의 부호와 숫자로만 이루어져있습니다.

     - s는 '0'으로 시작하지 않습니다.

     

    • 나의 답변
    • 정답 코드:
    function solution(s) {
         return Number(s);
    }

    정답이지만.. 제한사항을 과도하게 신경써서 오래 고민했다

    선입견을 가지고 문제를 접근하면 쉬운 길도 돌아가버리곤 하는 듯 하다.

     

    알게 된 점: 신기했던 것은 

     

    느낀 점: 문제 접근시 선입견 타파

     

    5. 두 정수 사이의 합 

    문자열 s를 숫자로 변환한 결과를 반환하는 함수, solutuin을 완성하세요.

    제한 조건 

     - s의 길이는 1 이상 5입니다.

     - s의 맨앞에는 부호(+,-)가 올 수 있습니다.

     - s의 부호와 숫자로만 이루어져있습니다.

     - s는 '0'으로 시작하지 않습니다.

     

    • 나의 답변
    • 정답 코드:
    function solution(s) {
         return Number(s);
    }

    정답이지만.. 제한사항을 과도하게 신경써서 오래 고민했다

    선입견을 가지고 문제를 접근하면 쉬운 길도 돌아가버리곤 하는 듯 하다.

     

    알게 된 점:

    • 문자열과 숫자 + 연산 => 문자열
    • 문자열과 숫자 * 연산 => 숫자

    이러한 점을 활용하면 이런 식의 계산도 가능하다.

    function solution(s) {
        return s/1
        // return s*1
        // return +s
    }

     

    느낀 점:  심플 이즈 베스트

     

     

     

    6. 없는 숫자 더하기(가장 아쉬웠던 문제..)

    0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수르 return 하도록 solution 함수를 완성해주세요.

    • 내 답변 

    의도 = 0~9까지의 합인 45에서 합산한 배열의 모든 값을 빼주려 했다.

    let plus = 0
    function solution(numbers) {
        for(let i=0; i <= numbers.length; i++) {
            plus += i; 
        }
        console.log (plus)
    }
    let a = 45
    console.log(a - plus)
    • 정답1
    function solution(numbers) {
        var answer = 0;
        for(let i=0; i<10; i++){
            if(!numbers.includes(i)) answer += i; // numbers가 i를 포함하지 않는다면, answer에 그 i 값들을 더해라
        } 
        return answer;
    }
    • 정답2
    function solution(numbers) {
        return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
      
    }
    
    let numbers = [5,8,4,0,6,7,9];
    console.log(solution(numbers)); // 6

    에러: for문을 돌릴 때 안에 숫자열 안에 있는 숫자들만 

     

    아쉬웠던 점:

     수학적계산을 자바 스크립트 언어로 구현을 못했음 ㅠㅠㅠㅠ 

     

     

     

     

     

     

    '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 2 22-07-16  (0) 2022.07.16
Designed by Tistory.