개발일지

20240104_TIL 9일차

비장한기린 2024. 1. 5. 06:19

[1] TIL

  1. 알고리즘 세션 2일차 by 강창민 튜터님

   (1) 문제 review

     Q1) 문자열 내에서 각 문자가 몇 번 등장하는지 세는 프로그램

       ex) 문자열이 ‘spartan’이 주어지면, s:1, p:1, a:2, r:1, n:1

     

    [연습 방법] : 로직을 연습장에 우리말로 먼저 써보기 > 의사코드 (pseudo code)

      1) 변수 a에 저장을 한다.    =>  let a = i;

      2) a의 값을 1씩 증가한다.  => a++;

  1. 문자열이 주어지면 : input이 외부로부터 주입됨 -> 함수의 인자가 문자열이다.
   function countCharacters(str) {
   return; // str의 문자 개수를 센 무언가를 리턴
   }

  2. 문자열을 순차적으로 읽으면서 손가락을 접으며 세면 됩니다.
   s : 1, p : 1, a : 1 + 1 = 2, r : 1, t : 1, n :1
   각 문자의 등장 횟수를 저장할 객체 -> 처음엔 빈 객체로
   let charCount = {};

  3. Key - value pair를 표로 정리
   charCount라는 변수를 빈 객체로 초기화하여 문자를 셀 때마다 기록
   문자열을 순회해야 문자의 등장 횟수를 카운트할 수 있음. 순회 => 반복문
   for (let i = 0; i < str.length; i++) {
         const char = str[I];
    // char 값을 기반으로 카운팅
    }

   4. [카운팅하는 로직]
    해당 객체에 카운트가 이미 있나요? -> 있으면 +1
    해당 객체에 카운트가 없나요? -> 1로 세팅

   4-1. 해당 객체에 카운트가 있는지?
    if (charCount[char]) {
     }

   4-2. charCount에서 char key가 있는지
    조건문으로 카운트 값이 존재하는지 여부를 파악. 카운트가 안 되어있다면 : undefined
    후위 연산자: 변수 뒤에++, --
    if (charCount[char]) {
    charCount[char]++;
    } else {
    charCount[char] = 1;
    }

 

  Q2) 주어진 문자열을 뒤집어서 반환하는 함수

   ex) 문자열 ‘spartan’ 주어지면 ‘naturals’ 

    문자열 내에서 각 문자가 몇 번 등장하는지 세는 프로그램

  1. 문자열이 input
   function invertCharacters(str) {
     // 여기를 채우면 된다.
     return ; // 뒤집힌 문자열을 반환
    }

  2. 변수 할당
   function invertCharacters(str) {
     let invertCharacters = { }; // 빈 객체로
     return ;
     }
 
  3. for 문으로 반복
    for (let i = 0; i < str.length; i++) {
       const char = str[i];
     }
 
  4. str.length : n이라고 하면
   str[0] -> str[n]
   str[1] -> str[n-1]
   str[2] -> str[n-2]
   str[i] = str[str.length - i]
  이제 어떻게 표현하지?? 이렇게 보내는 걸 어떻게 하지??
   => 발상의 전환이 필요했음 : i++  --->   i-- 
  

 

  Q3) 주어진 숫자가 소수인지 아닌지 판별하는 함수를 작성

  소수는 1과 자기 자신으로만 나누어지는 1보다 큰 정수.

  힌트 : 나머지 값을 구하는 연사자는 %

  1. input이 숫자
   function checkNum (num) { }

  2. 소수의 정의 및 표현 
   -> 소수 2, 3, 5, 7, 11,….
  2-1. 소수 5
    5 % 1 = 0  ,  5 % 2 = 1   ,   5 % 3 = 2   ,   5 % 4 = 1   ,  5 % 5 = 0
  2-2. 소수 7
    7 % 1 = 0  ,  7 % 2 = 1   ,   7 % 3 = 1    ,   7 % 4 = 3   ,  7 % 5 = 2   ,  7 % 6 = 1    ,   7 % 7 = 0

  2-3.  num % 1 = 0  &&  num % num = 0   =>   이건 모든 수가 그렇고
    나머지는 모두 0이 아니다 >> 이걸 표현해야함. : 막히는 지점
 
  3. for 문으로 반복  
   for ( i = 0 ; i < num ; i++ ) {
    }
   
  4-1. 소수일 때
    if ( ) {  return "소수입니다"  }
  4-2.  조건 2. 소수가 아닐 때
    else { return "소수가 아닙니다."}

 

  (2) 느낀 점

    1) 2시간 동안 3개의 문제를 풀어봤는데, 한글로 논리를 먼저 생각해보고 이를 어떻게 코드로 표현할지를 고민했다.

       어떻게 접근해야 하는지, 시작을 어떻게 하는지를 알고 꽤 긴 시간 동안 집중해서 머리를 굴려보니,

       그래도 답에 조금씩 가까워지는 느낌적인 느낌 느낌.

    2) 1일차에는 문제를 맞닥뜨리면 사고 회로가 정지되고 뭘 어떻게 해야할지 눈 앞이 깜깜했는데,

      문제를 해결하려고 노력하는 과정이 재밌었고 이 부분에서 하루 만에 많이 발전한 것 같다. 

 

 2. 코드 카타 

  1) 데일리 루틴 lv. 1 #8 ~ #10 문제 해결  =>  lv. 2 !

  2) 목표

    a. 데일리 루틴은 루틴대로 진행

    b. 프로그래머스 lv. 0 문제 다 푸는 것을 1차 목표로 하고 VS code에 따로 폴더 만들어 저장해두기

 

 3. JavaScript 문법종합반 4주차, 5주차

  1) 강의는 수강 완료

  2) 5주차 과제 제출은 아직

  3) 내용 정리는 추후 TIL에

  4) 강의 내용 바탕으로 개인 과제 (due date : 2024. 01. 08  2 p.m.) 시작하기