코딩테스트 스터디 7주차 학습 자료를 정리한 글이다.매 순간 가장 좋아 보이는 선택을 반복해 전체 최적해를 구하는 방식과, 이분 탐색과 결합해 최적값을 검증하는 패턴을 다룬다.1. 그리디 알고리즘그리디란그리디 알고리즘은 매 순간 가장 좋아 보이는 선택을 하는 방식이다. 미래를 고려하지 않고 현재 상태에서 최적인 선택을 반복한다.편의점에서 잔돈을 거슬러줄 때와 같은 원리다. 1000원을 거슬러줘야 한다면, 500원짜리를 먼저 최대한 사용하고, 그다음 100원, 50원, 10원 순서로 처리한다. 매 단계에서 가능한 큰 동전을 선택하는 것이 결국 최소 개수의 동전으로 이어진다.그런데 이 전략이 항상 옳은 것은 아니다. 동전 종류에 따라 그리디가 실패하는 경우도 있다. 그것이 그리디와 DP를 구분하는 핵심이다...
코딩테스트 스터디 7주차 학습 자료를 정리한 글이다.정렬된 배열에서 탐색 범위를 절반씩 줄여 나가는 알고리즘과, 이를 확장해 최적값을 구하는 파라메트릭 서치를 다룬다.1. 이분 탐색 기초이분 탐색이란이분 탐색은 정렬된 배열에서 특정 값을 찾을 때 사용하는 탐색 알고리즘이다. 처음부터 끝까지 하나씩 확인하는 선형 탐색은 O(n)이지만, 이분 탐색은 O(log n)이다. n이 10억이어도 탐색 횟수는 30번이면 충분하다.전화번호부를 펼칠 때와 같은 원리다. "박지훈"을 찾는다면 책 한가운데를 펼쳐서 현재 위치가 "박"보다 앞인지 뒤인지 확인한다. 앞이라면 오른쪽 절반만, 뒤라면 왼쪽 절반만 남긴다. 이 과정을 반복하면 수천 페이지의 전화번호부도 10번 남짓한 탐색으로 찾을 수 있다.단, 이분 탐색은 반드시 ..
이 블로그 포스팅을 참고하였으나, 버전이 올라감에 따라 설정이 충돌되는 부분이 생겨 업데이트 버전을 직접 작성한다.1. SVG를 React에서 다루는 두 가지 방식SVG 파일을 React에서 사용하는 방법은 크게 두 갈래로 나뉜다. 하나는 빌드 시점에 번들러가 SVG를 React 컴포넌트로 변환하도록 맡기는 방식이다. vite-plugin-svgr이 여기에 해당한다. import Icon from "./icon.svg?react"처럼 쿼리 문자열 한 줄로 컴포넌트를 얻을 수 있다.다른 하나는 @svgr/cli를 사용해 SVG를 .tsx 파일로 미리 변환해 두는 방식이다. 컴파일 대상이 되는 실제 소스 파일로 존재하므로, 에디터에서 컴포넌트 이름으로 바로 이동하거나 참조를 추적하는 데 유리하다.두 방식은 ..
김영한의 실전 자바 - 기본편 강의 내용을 정리한 글이다.1. 좋은 객체 지향 프로그래밍이란?객체 지향 프로그래밍(OOP)의 핵심 특징은 네 가지다. 추상화 캡슐화 상속 다형성 이 중 가장 중요한 것이 다형성(Polymorphism)이다. 객체 지향 프로그래밍은 명령어의 목록으로 프로그램을 보는 절차적 시각에서 벗어나, 여러 독립된 단위인 "객체"들의 협력으로 세상을 파악한다. 각 객체는 메시지를 주고받으며 데이터를 처리한다.좋은 객체 지향 설계가 추구하는 것은 유연하고 변경이 용이한 소프트웨어다. 레고 블록을 조립하듯, 키보드나 마우스를 교체하듯, 컴포넌트를 쉽게 바꿀 수 있는 구조가 목표다. 이것이 대규모 소프트웨어 개발에서 OOP가 널리 쓰이는..
김영한의 실전 자바 - 기본편 강의 내용을 정리한 글이다.1. 다형성이 없을 때의 문제다형성의 장점을 이해하려면 다형성 없이 코드를 작성했을 때 어떤 문제가 생기는지를 먼저 봐야 한다. 가장 고전적인 예제인 동물 울음 소리를 통해 살펴보자.Dog, Cat, Caw(소) 세 클래스가 있고, 각자 sound() 메서드를 가진다. 이들 사이에는 아무런 상속 관계가 없다. sound() Dog sound() Cat sound() Caw 세 클래스는 서로 완전히 독립적이다. 이 상태에서 동물 소리 테스트 코드를 작성하면 다음과 같은 중복이 발생한다.System.out.println("동물 소리 테스트 시작");dog.sound();System.out.pr..
김영한의 실전 자바 - 기본편 강의 내용을 정리한 글이다.1. 다형성이란객체지향 프로그래밍의 대표적인 특징으로는 캡슐화, 상속, 다형성이 있다. 그 중에서 다형성은 객체지향 프로그래밍의 꽃이라 불린다.앞서 학습한 캡슐화나 상속은 직관적으로 이해하기 쉽다. 반면에 다형성은 제대로 이해하기도 어렵고, 잘 활용하기는 더 어렵다. 하지만 좋은 개발자가 되기 위해서는 다형성에 대한 이해가 필수다.다형성(Polymorphism)은 이름 그대로 "다양한 형태", "여러 형태"를 뜻한다. 프로그래밍에서 다형성은 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 뜻한다. 보통 하나의 객체는 하나의 타입으로 고정되어 있다. 그런데 다형성을 사용하면 하나의 객체가 다른 타입으로 사용될 수 있다는 뜻이다.다형성을 이해하기..