개발자 박가나

[241015 TIL] 본캠프 10일차 ('영화 사이트 만들기' 프로젝트 1일차) 본문

내일배움캠프/본캠프

[241015 TIL] 본캠프 10일차 ('영화 사이트 만들기' 프로젝트 1일차)

gnchoco97 2024. 10. 15. 17:17

 Today 1. 알고리즘 문제 풀이 

  • [신고 결과 받기] 문제 풀이
    • 일부 테스트 케이스에서 시간 초과 오류 발생
    • 내일 한 번 더 시도해보고 해결하지 못할 경우 답안 참고 예정
function solution(id_list, report, k) {
    let result = Array.from({ length: id_list.length }, () => 0)
    
    // 중복 신고 제거 (한 유저가 동일한 유저를 여러번 신고해도 1회로 처리)
    report = Array.from(new Set(report))
        
    for (let i = 0; i < id_list.length; i++) {
        // id_list[i] 유저가 신고한 내역
        const userReport = report.filter((item) => item.split(' ')[0] === id_list[i])
        
        for (let j = 0; j < userReport.length; j++) {
            const reportCount = report.filter((item) => {
                return item.split(' ')[1] === userReport[j].split(' ')[1]
            })
            
            if (reportCount.length >= k) {
                result[i]++
            }
        }
    }
    
    return result
}
알고리즘 문제를 풀 때마다 제일 난감한 상황이 시간 초과 또는 런타임 오류가 발생하는 순간인 것 같다. 아예 로직이 틀린 경우에는 좀 더 고민해서 코드를 고쳐나가면 되지만, 시간 초과나 런타임 오류 같은건 로직 자체는 맞지만 효율성이 떨어지는 코드라는 뜻이고 일부 테스트 케이스에서는 문제가 없는 코드이다 보니 어떻게 수정을 해나가야 하는지 막막해지곤 한다. 지금까지는 어떻게든 혼자 힘으로 해결하는 것이 최선이라고 생각했는데 튜터님께서 다른 사람의 코드를 보는 것도 현재 단계에서는 도움이 된다고 말씀해주셔서 앞으로는 고민하는 시간과 참고하는 시간을 적절히 배분하고자 한다.

 Today 2. [JavaScript 문법 종합반] 강의 

  • DOM
    • Document를 JavaScript가 이해할 수 있는 Object 형태로 Modeling한 것
    • 브라우저에 기본적으로 내장되어 있는 API 중 하나
    • DOM이 있기 때문에 JavaScript로 HTML 접근 및 제어 가능
  • Class
    • Class : 객체를 만들기 위한 설계도
    • Constructor : Class의 생성자 함수
    • Getter : 속성 값을 반환하는 메소드
    • Setter : 속성 값을 할당하는 메소드
    • 상속을 통해 다른 Class의 기능을 물려받을 수 있음
    • static 메소드를 통해 Class 이름으로 직접 호출 가능
  • Closure
    • 함수와 그 함수가 선언된 렉시컬 환경의 조합
    • 외부 함수보다 중첩 함수가 더 오래 유지되는 경우, 중첩 함수는 생명 주기가 종료된 외부 함수의 변수를 여전히 참조 가능
JavaScript 강의 수강이 마무리되었다. 실습을 진행할 때는 별다른 어려움이 없었지만 오히려 이론 수업을 진행할 때 어려움이 많았던 것 같다. 이해가 되지 않아서 여러 번 돌려본 강의도 있고 이미 알고 있는 내용이라 설렁설렁 들은 강의도 있지만 JavaScript에 대한 정확한 지식없이 습관적으로 코딩만을 해오던 나에게 너무나도 큰 도움이 된 강의였다.

 Today 3. [영화 사이트 만들기] 프로젝트 

  • TMDB API 연동하기

API로 가져온 데이터

오늘부터 개인 프로젝트가 시작되었지만 아직 수강을 완료하지 못한 강의가 남아있었기 때문에 강의 수강을 우선 순위로 두고, 프로젝트는 TMDB API를 활용하여 데이터를 받아오는 것까지만 진행하게 되었다. 다행히 큰 어려움 없이 데이터가 잘 받아와지는 것을 확인할 수 있었고, 내일부터 본격적으로 프로젝트를 진행할 수 있는 최소한의 준비는 한 것 같아 뿌듯한 마음이 들었다.

 Today 4. [달리기반] 실습 수업 1회차  

  • 변수 (Variable)
    • var / let / const
  • 데이터 타입 (Data Type)
    • 기본 타입 / 참조 타입
  • 연산자 (Operator)
    • 산술 연산자 / 할당 연산자 / 비교 연산자 / 논리 연산자
  • 함수 (Function)
    • 함수 선언식 / 함수 표현식 / 화살표 함수 / 즉시 실행 함수
  • 조건문 (Condition Statement)
    • if문 / if - else문 / if - else if - else문 / switch문 / 삼항 연산자
  • 반복문 (Loop)
    • for문
어제 진행했던 이론 수업을 기반으로 실습 수업이 진행되었고, 단순히 눈으로 보는 것과 직접 손으로 코딩해 보는 것은 큰 차이가 있다는 것을 알기 때문에 열심히 실습에 참여하였다. 가장 기초적인 내용이었지만 동시에 가장 자주 사용되는 개념들이었고 모든 일은 기초가 가장 중요하다는 것을 새삼 다시 한 번 느끼게 된 계기가 되었다.

 Today 5. [알고리즘] 특강 4회차  

  • [문제풀이] 배열의 유사도
  • [문제풀이] k번째 수
  • 기업에서 진행하는 코딩 테스트
    • 코딩 테스트는 어떻게 진행되는가?
    • 코딩 테스트의 수준은 프로그래머스의 몇 레벨 정도인가?
    • 어떤 알고리즘을 사용해야 하는가?
    • 코딩 테스트 환경은 어떤가?
    • 코딩 테스트는 반드시 모든 문제를 맞춰야 하는가?
  • 기업의 코딩 테스트를 응시하면서 느낀 점
    • 테스트 케이스를 스스로 만드는 경험 필요
    • 다양한 제약 상황 속에서 문제를 푸는 경험 필요
    • 서류 합격 후 코딩 테스트 전형 시작을 위한 대비 필요
  • 면접관의 입장에서 알게 된 것
    • 코딩 테스트의 모든 과정이 기록됨
    • 채점자의 입장에서 좋지 못한 패턴 존재
개발자를 꿈꾸기 시작했을 때부터 알고리즘의 중요성은 잘 알고 있었고 그렇기 때문에 많은 시간을 투자했었지만, 어느 순간부터 단순히 취업을 위한 공부가 되어버렸고 회사를 다닐 때는 아예 손을 놔버렸었던 것 같다. 이제부터라도 다시 꾸준히 시간을 투자해서 습관으로 자리 잡힐 수 있도록 노력할 것이고, 많은 문제를 풀어보는 것도 중요하겠지만 어떤 알고리즘을 사용해야 하는지, 어떤 알고리즘이 자주 사용되는지에 대한 파악도 중요하다는 생각이 들었다.