행복을 담는 블로그

[TIL] 240103(수) 알고리즘 코드카타 시작! 본문

TIL

[TIL] 240103(수) 알고리즘 코드카타 시작!

hyun0zin 2024. 1. 3. 21:06

오늘의 공부📖

  1. 09-11시 [특강] 알고리즘 세션 1일차
  2. JS 문법 1주차 복습
  3. JS 문법 2주차 강의 수강
  4. 16-17시 [특강] sort 정복 강의 수강

 

오늘 공부한 내용 정리💁🏻‍♀️

 

1. 복습한 내용

1) 반복문 (for, while)

📌 for문 기본구조

for (초기값; 조건식; 증감식) {
}

ex)

 for (let i=0; i<10; i++){
    console.log("FOR문 돌아가고 있음 => " + i);
 }

▶️ console.log 실행 시, 반복 진행되는 것 볼 수 있음.

 FOR문 돌아가고 있음 => 0
 FOR문 돌아가고 있음 => 1
 FOR문 돌아가고 있음 => 2
 FOR문 돌아가고 있음 => 3
 FOR문 돌아가고 있음 => 4
 FOR문 돌아가고 있음 => 5
 FOR문 돌아가고 있음 => 6
 FOR문 돌아가고 있음 => 7
 FOR문 돌아가고 있음 => 8
 FOR문 돌아가고 있음 => 9

 

2) 1주차 문제 풀이

function solution(s) {
    var answer = true;

    // 1. 대문자로 통일 
    s = s.toUpperCase(); 


    // 2. for 문을 통해서 문자열의 요소 하나씩을 비교
    // => p, y 와 비교 
    var num = 0;

    for (var i = 0; i < s.length; i++) {

      // 여기서 비교
        if (s[i] === 'P') {
            num++;
        }
        if (s[i] === "Y"){
            num--;
        }
    }
    // 3. 개수 체크 (p와 y 개수가 같은지를 체크)
    if (num === 0){
        answer = true;
    } else {
        answer = false;
    }
    // [실행] 버튼을 누르면 출력 값을 볼 수 있다.

    return answer;
}
--------------------------------------------

var str1 = "pPoooyyY"
var str2 = "ppyY"

console.log(solution(str2)); // false
console.log(solution(str2)); // true
  1. toUpperCase : 문자열 내 모든 문자를 대문자로 만들기
  2. for문(반복문)을 이용하여 p와 y의 개수 체크하기
  3. if문 (조건문)을 이용하여 p의 개수와 y의 개수가 같은지 비교!

💡 처음 ture/ false를 출력하는 것은 조건문을 활용해야겠다는 생각을 했지만, 어떻게 비교를 해야하는지 알지 못했다. toUpperCase 라는 것을 이용하는 것을 이용하여 모두 같은 형태로 바꾼 다음, 반복문을 이용해 문자열의 index를 순차적으로 비교해 나가는 것을 배웠다.



2. 새롭게 배운 내용

1) 등호 연산자 사용 시, 끊어서 작성하기

❓ 프로그래머스(javascript)에서 문제를 푸는데 둔각을 표현하는 90 < angle < 180 를 이용하여 코드를 작성하니 자꾸 오류가 났다.

그 이유는 바로,
90 < angle && angle < 180 이렇게 쪼개서 작성하지 않았기 때문!

 

2) Javascript Math.ceil/ floor / round

Math.ceil() : 소수점 아랫자리를 올리는 함수 (올림)
Math.floor() : 소수점 아랫자리 버리는 함수 (버림)
Math.round() : 소수점이 존재 할 때, 소수값에 따라 올리거나 버리는 함수 (반올림)

 

3) [실시간 강의] sort 문법

✅ sort 문법
: 배열의 요소를 정렬할 때 사용하는 문법

const arr = [3,1,2];
array.sort(); // [1,2,3]
  • sort의 기본 특징
    1️⃣ 배열 그 자체가 변환
    2️⃣ 정렬된 배열을 반환
  • sort의 기본 원리
    : sort 비교 함수의 작동 방식▶️ sort 함수 내부에는 비교함수가 들어간다!
  • array.sort([compareFunction])

❓ sort() v.s sort((a,b) => a-b)

  • sort()
    : sort 함수 내부를 빈 함수로 두지 마라.
    → sort () 안을 비우면, 요소들을 문자열로 취급하여 정렬한다.
    유니코드 순서에 따라 9보다 80을 우선이라고 생각하여 예상하지 못한 정렬이 나오기도 함.
  • sort((a,b) => a-b)
    : 비교 함수를 통해 a와 b 사이의 값을 비교하여 오름차순, 내림차순의 순서에 맞게 정렬함.
  • sort() 함수의 표현 방법
//표현 1(function 사용)
arr.sort(function(a,b){
     return a-b; //ascending 오름차순 정렬
 });

// 표현 2(화살표 함수)
 arr.sort((a,b)=> {
     return a-b; //ascending 오름차순 정렬
 });

// 표현 3 (한 줄로 표현)
 arr.sort((a,b) => a-b); //ascending 오름차순 정렬



3. 알고리즘 코드카타 시작

📌 알고리즘의 정의
: 어떤 문제의 해결을 위하여, 입력된 자료를 토대로 하여 원하는 출력을 유도하여 내는 규칙의 집합. 여러 단계의 유한 집합으로 구성되는데, 각 단계는 하나 또는 그 이상의 연산을 필요로 한다.

🧐 알고리즘을 왜 공부해야 할까?
Computational Thinking(컴퓨터 사고) 능력을 극대화 할 수 있다!

  • 코딩 테스트를 보기 위해!
  • 문제 해결 능력을 키우기 위해!

 

하루를 마치며...🤔

아침 알고리즘 세션 특강을 시작으로 많은 실시간 강의를 수강한 하루였다. 코드테스트를 보기 위해서라도 알고리즘 공부를 계속해서 진행을 해야한다. 아직 어떤 언어라도 제대로 된 언어가 없기에 막상 문제를 봐도 어떻게 어떤 문법을 이용해서 문제를 풀어나가야 하나 막막하기만 했다. 그래도 앞으로 계속해서 꾸준히 문제를 풀어나가다 보면 언젠가 꼭 알고리즘을 정복하는 날이 오기를 바라며 힘을 내야겠다!

오늘을 강의를 수강하지 않는 동안에도 많은 내용을 알게 되었다. 프로그래머스 문제를 풀다가도 모르는 문법이 나와 찾아보기도 했고, 실시간 강의를 통해서도 처음 배우는 내용을 접했다. 하루종일 새로운 내용, 처음 보는 문법들이 시도때도 없이 불쑥 찾아오곤 하는데, 한 번 듣고 까먹지 말고 꼭 잘 정리해놓고 여러번 반복해서 학습해야겠다!

 

한 줄 회고😎

그날 배운 내용을 당일에 꼭 복습하고 정리해서 업로드하자! + 무한 반복 복습만이 길이다!!

내일 해야 할 일

  • 강의 3,4 주차 수강하기 + 정리하기
  • Github 문제 해결하기..
  • 개인과제하기