전체 글

좋아하는 걸 더 잘할 수 있도록 기록 블로그 보러가기🌵
TIL

TIL 5: DI란

TL;TR 의존관계란: B 클래스가 바뀔 때 A 클래스가 영향을 받는다는 것 DI(의존성 주입)이란: 클래스 간 의존관계를 외부에서 결정하고 주입하는 것 IoC Container란: 자동으로 의존성을 주입하기 위한 프레임워크 Dependency 의존관계란 “A가 B를 의존한다.” B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다. 즉, B 클래스가 바뀔 때 A 클래스가 영향을 받는다는 것. class Programmer() { private coffee: Coffee; public constructor() { this.coffee = new Coffee(); } public startProgramming() { this.coffee.drink(); } } 위 코드와 같이 Progra..

코딩테스트

[프로그래머스/Javascript] 캐시

📄 문제 Lv 2. 2018 KAKAO BLIND RECRUITMENT [1차] 캐시 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🔍 문제 접근 ❓ 캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용한다. 💡 FIFO로 캐시를 저장하자. 💡 캐시에 동일한 도시 이름이 저장되는 경우도 고려한다. 📝 문제 풀이 function solution(cacheSize, cities) { if (0 === cacheSize) { return cities.length * 5; } const cashedCities = []; let time = 0..

코딩테스트

[프로그래머스/Javascript] 짝지어 제거하기

📄 문제 Lv. 2 2017 팁스타운 짝지어 제거하기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🔍 문제 접근 💡 항상 2개씩 제거되어야 하므로 s의 길이가 홀수인 경우에는 항상 0으로 리턴한다. 💡 Stack을 사용해 문제를 해결한다. 다른 방법으로 접근했다가 효율성 테스트를 통과하지 못했다..😥 👉 입출력 예 #1으로 Stack 이해하기 📝 문제 풀이 function solution(s) { if (s.length % 2) { return 0; } const stack = []; for (let i = 0; i < s.length; i++) { c..

코딩테스트

[프로그래머스/Javascript] 구명보트

📄 문제 Lv 2. 탐욕법(Greedy) 구명보트 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🔍 문제 접근 💡 가장 효율적으로 구명보트를 운영하려면 무게 제한을 넘지 않는 선에서 가장 작은 몸무게 + 가장 큰 몸무게를 함께 태운다. 📝 문제 풀이 function solution(people, limit) { const ascendingPeople = people.sort((a, b) => a - b); let count = 0; while (ascendingPeople.length) { if (limit >= ascendingPeople[0] + as..

TIL

TIL 4: RDD

RDD(Responsibility-Driven Design)객체의 책임과 협업에 초점을 두는 책임 주도 설계로 시스템의 동작을 명확하게 이해하고 모델링 되는 객체의 실제 책임과 일치하는 설계를 지향한다.특징책임: 객체는 특정 작업이나 동작을 담당한다. 입력 처리, 계산 수행, 상태 유지 또는 다른 개체와의 상호 작용이 포함될 수 있다.협업: 원하는 시스템 동작을 달성하기 위해 객체 간의 협업을 촉진한다. 객체는 정보를 요청 또는 제공하거나 작업을 수행하기 위해 메시지를 전송하여 통신하고 함께 작업한다.메시지 전달: 객체는 메시지 전달을 통해 서로 통신한다. 메시지 전달을 통해 객체는 상호 작용하고 책임을 이행할 수 있다.캡슐화: 객체 내 동작과 데이터를 캡슐화 하는 것을 강조한다. 캡슐화는 객체가 자체 ..

코딩테스트

[프로그래머스/Javascript] 올바른 괄호

📄 문제 Lv 2. 스택/큐 올바른 괄호 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🔍 문제 접근 💡 )가 (보다 먼저 있으면 안 된다. 💡 (와 )의 수가 같아야 한다. 📝 문제 풀이 function solution(s){ let leftCount = 0; let rightCount = 0; for (let i = 0; i < s.length; i++) { if ('(' === s[i]) { leftCount += 1; } else { rightCount += 1; } if (leftCount < rightCount) { return false; }..

코딩테스트

[프로그래머스/Javascript] 영어 끝말잇기

📄 문제 Lv. 2 Summer/Winter Coding(~2018) 영어 끝말잇기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📝 문제 풀이 ❓ if (0 === i) 조건 대신 let i = 1;로 작성했었는데, 이상하게 시간이 더 오래 걸렸다. 똑같이 변수를 초기화하고 값을 할당하는 건데 0과 1 이 뭔가 차이가 있나? 조금 더 검색해 봐야겠다. function solution(n, words) { let answer = [0, 0]; for (let i = 0; i < words.length; i++) { if (0 === i) { continu..

TIL

TIL 3: Tech Spec

테크스펙(Tech Spec)이란? 기술 설명서. 기능을 구현하기 전에 이 기능을 어떻게 구현할 것인지 기술적으로 풀어 설명하고, 제안하는 글 장점 기획적 오류, 버그를 초기에 발견 가능 커뮤니케이션 비용 절감 문서화를 통한 히스토리 파악 가능 내용 요약(Summary) 테크 스펙을 세 줄 내외로 정리. 테크 스펙의 제안 전체에 대해 누가/무엇을/언제/어디서/왜를 간략하면서도 명확하게 적는다. 배경(Backgroud) 프로젝트의 상황(문맥)을 적는다. 목적과 동기, 어떤 문제를 해결하려고 하는지, 이 문제를 해결하기 위해 이전에 시도가 있었는지 등을 적는다. 목표(Goal) 예상 결과들을 Bullet Point 형태로 나열한다. 이 목표와 측정가능한 임팩트들을 통해 프로젝트의 성공 여부를 평가하는 척도로 ..

TIL

TIL 2: Rendering (CSR, SSR)

CSR (Client Side Rendering) 클라이언트(브라우저)에서 웹 페이지를 렌더링 하는 것 모든 로직, 데이터 가져오기, 템플릿, 라우팅은 서버가 아닌 모두 클라이언트에서 처리된다. 주로 SPA(Single Page Application)에서 사용한다. 자바스크립트 번들의 크기의 영향을 많이 받기 때문에 적극적인 코드 분할(code splitting)을 고려해야 한다. 동작 방식 사용자가 홈페이지를 방문하면 index.html을 다운받는다. 이 HTML 파일은 script, meta, link 등의 태그를 포함하며, 빈 콘텐츠 파일이라고 보면 된다. 브라우저는 index.html 안의 bundle.js를 다운받는다. js 파일을 읽으며 렌더링 한다. 사용자가 페이지를 이동할 경우, 이미 받은..

코딩테스트

[프로그래머스/Javascript] 덧칠하기

📄 문제 Lv. 1 연습문제 덧칠하기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🔍 문제 접근 💡 한 번의 페인트칠로 어느 구역까지 칠해졌는지 확인하고, section을 돌면서 이미 칠해진 영역인지 확인하면 되지 않을까? 📝 문제 풀이 function solution(n, m, section) { let count = 0; let lastSectionIndex = 0; section.forEach((part, i) => { if (0 === i || m + lastSectionIndex

셈인
일단 만들어