
프로그래밍을 처음 배울 때 알고리즘은 보통 문제를 해결하기 위한 순서와 절차라고 배운다.예를 들어 여러 쿠폰 중에서 특정 쿠폰을 찾는 문제는 다음과 같이 해결할 수 있다.앞에서부터 쿠폰을 하나씩 확인하다가 ID가 같은 쿠폰을 반환한다. 알고리즘의 기본적인 개념을 이해하

알고리즘을 처음 공부할 때는 주로 정해진 문제를 해결하는 코드를 작성한다.문제에는 입력과 출력이 명확하게 주어진다.쿠폰 목록에서 아직 사용하지 않았고 만료되지 않은 쿠폰만 반환하라.이 코드는 쿠폰 목록을 하나씩 확인하고, 사용되지 않았으며 만료되지 않은 쿠폰만 새로운

알고리즘을 처음 공부할 때는 비슷한 유형의 문제를 반복해서 푼다.배열에서 중복된 값을 찾는 문제라면 다음과 같은 코드를 배울 수 있다.이미 확인한 쿠폰 ID를 Set에 저장하고, 같은 ID가 다시 등장하면 중복이 있다고 판단한다.중복 탐지 문제의 기본적인 해결 방법을

프로그래밍을 처음 배울 때는 주어진 문제를 코드로 구현하는 연습을 많이 한다.예를 들어 다음과 같은 문제가 주어진다.쿠폰 목록을 만료일이 가까운 순서로 정렬하라.이 코드는 원본 배열을 복사한 뒤 각 쿠폰의 만료 시각을 비교하여 가까운 순서로 정렬한다.문제가 이미 명확하

프로그래밍을 처음 배울 때는 문제가 이미 정리된 상태로 주어진다.예를 들어 다음과 같은 요구사항을 받을 수 있다.쿠폰을 사용할 수 있는지 확인하는 함수를 작성하라.쿠폰의 상태, 남은 사용 횟수와 만료 시각을 확인해 사용 가능 여부를 반환한다.입력과 출력이 명확한 문제를

알고리즘을 처음 배울 때는 주어진 예제의 입력을 코드에 넣고 기대한 출력이 나오는지 확인한다.10% 할인 쿠폰의 할인 금액을 계산하는 문제를 생각해보자.입력은 주문 금액 10000과 할인율 0.1이고, 출력은 할인 금액 1000이다.테스트도 간단하게 작성할 수 있다.이

알고리즘 문제를 처음 풀 때 제약 조건은 보통 입력 범위와 함께 주어진다.쿠폰의 개수 N은 1 이상 100,000 이하이다.제한 시간은 1초이고 메모리 제한은 256MB이다.사용 가능한 쿠폰을 찾는 문제라면 다음과 같이 작성할 수 있다.이 코드는 쿠폰을 하나씩 확인하고

알고리즘을 처음 배울 때 입력은 함수에 전달되는 값이고, 출력은 함수가 반환하는 값이라고 배운다.이 함수의 입력은 상품 가격과 할인율이고, 출력은 할인 금액이다.알고리즘의 동작을 이해하기에는 충분한 설명이다. 입력이 주어지면 정해진 절차로 처리한 뒤 결과를 반환한다는

알고리즘을 처음 배울 때 엣지 케이스는 보통 일반적인 입력과 조금 다른 특수한 사례로 배운다.쿠폰 목록에서 가장 할인 금액이 큰 쿠폰을 찾는다고 생각해보자.쿠폰이 하나 이상 들어온다면 할인 금액을 비교하여 가장 큰 쿠폰을 반환한다.이런 기본적인 구현을 이해한 뒤에는 다

알고리즘을 처음 배울 때 완전 탐색은 가능한 모든 경우를 하나씩 확인하는 방법이라고 배운다.세 개의 쿠폰 중 가장 큰 할인 금액을 찾는다면 모든 쿠폰을 확인할 수 있다.이 코드는 쿠폰을 처음부터 끝까지 확인하면서 지금까지 발견한 가장 큰 할인 쿠폰을 기억한다.가능한 후

프로그래밍을 처음 배울 때 문제 분해는 큰 문제를 작은 문제로 나누는 과정이라고 배운다.하나의 긴 함수에 모든 코드를 작성하는 대신 작은 함수로 나누는 방식이다.쿠폰 검증, 할인 계산과 주문 결과 생성을 각각의 함수로 분리했다.코드의 흐름을 읽고 각 기능을 따로 이해하

알고리즘을 처음 배울 때는 입력을 받아 정답을 반환하는 코드를 작성한다.쿠폰 목록에서 할인 금액이 가장 큰 쿠폰을 찾는다면 다음과 같이 구현할 수 있다.이 코드는 쿠폰을 하나씩 확인하면서 지금까지 발견한 가장 큰 할인 쿠폰을 기억한다.입력과 출력이 명확한 문제에서 반복

알고리즘을 처음 배울 때 시간 복잡도는 입력 크기에 따라 코드의 실행 횟수가 어떻게 증가하는지 나타내는 개념으로 배운다.쿠폰 목록에서 사용할 수 있는 쿠폰을 찾는 코드를 생각해보자.쿠폰이 n개라면 반복문은 최대 n번 실행된다.따라서 이 알고리즘의 시간 복잡도를 O(n)

알고리즘을 처음 배울 때 Big O는 입력 크기가 증가할수록 실행 횟수가 어떻게 증가하는지 나타내는 표기법으로 배운다.공연장의 좌석 목록에서 특정 좌석을 찾는 코드를 생각해보자.좌석이 n개일 때 최악의 경우 모든 좌석을 확인해야 하므로 이 탐색을 O(n)이라고 표현한다

알고리즘을 처음 배울 때 O(1)은 입력 크기와 관계없이 일정한 횟수로 끝나는 작업이라고 배운다.주문 ID를 키로 사용하는 Map에서 주문을 찾는 코드를 생각해보자.주문이 10개이든 100만 개이든 조회 과정이 주문 수에 비례해 길어지지 않는다.따라서 평균적인 조회 비

알고리즘을 처음 배울 때 반복문 하나가 O(n)이고 그 안에 반복문이 하나 더 있으면 O(n²)이라고 계산하는 방법을 배운다.여러 주문의 상품을 확인하는 코드를 생각해보자.겉으로 보면 반복문이 두 겹이다.입문 단계에서는 중첩 반복문의 비용이 곱해질 수 있다는 사실을 이

알고리즘을 처음 배울 때는 평균적인 경우와 최악의 경우를 구분해 성능을 분석한다.업로드 기록에서 특정 파일을 찾는 선형 탐색을 생각해보자.찾는 파일이 목록의 중간쯤에 있다면 평균적으로 전체 데이터의 절반 정도를 확인한다.파일이 없거나 마지막에 있다면 모든 데이터를 확인

알고리즘을 처음 배울 때 공간 복잡도는 입력 크기가 증가할수록 알고리즘이 사용하는 메모리가 얼마나 늘어나는지 나타내는 개념으로 배운다.중복된 배달 기사 ID를 제거하는 코드를 생각해보자.기사 ID가 n개라면 seen에는 최대 n개의 값이 저장된다.따라서 추가로 사용하는

알고리즘을 처음 배울 때 공간 복잡도는 입력 크기가 증가할수록 알고리즘이 사용하는 메모리가 얼마나 늘어나는지 나타내는 개념으로 배운다.중복된 배달 기사 ID를 제거하는 코드를 생각해보자.기사 ID가 n개라면 seen에는 최대 n개의 값이 저장된다.따라서 추가로 사용하는

알고리즘을 처음 배울 때 최적화는 같은 결과를 더 적은 시간이나 공간으로 계산하도록 알고리즘을 개선하는 일이라고 배운다.강의 목록을 최신순으로 정렬하는 코드를 생각해보자.강의가 n개라면 일반적인 정렬 비용은 O(n log n)으로 생각할 수 있다.이미 정렬된 데이터를

알고리즘을 처음 배울 때 배열은 여러 값을 순서대로 담는 자료구조라고 배운다.이 설명은 배열의 문법을 이해하는 데 충분하다. 하지만 실제 음악 서비스에서 플레이리스트를 만들기 시작하면 새로운 질문이 생긴다. 사용자가 곡의 순서를 바꾸면 무엇을 저장해야 할까? 세 번째

연결 리스트를 처음 배우면 각 데이터가 다음 데이터를 가리키는 구조라고 설명한다.새로운 노드를 삽입할 때 뒤쪽 데이터를 옮길 필요가 없으므로 배열보다 삽입이 빠르다는 설명도 함께 배운다. 입문 단계에서는 배열과 연결 리스트의 구조적 차이를 이해하는 데 유용하다.그러나

해시 테이블을 처음 배우면 키와 값을 한 쌍으로 저장하고, 키를 사용해 데이터를 빠르게 찾는 자료구조라고 설명한다.배열에서 상품을 하나씩 확인하는 대신 상품 ID로 바로 조회할 수 있다. 해시 테이블의 평균 조회 시간은 O(1)이므로 빠르다는 설명도 입문 단계에서는 충

해시 테이블을 처음 배우면 키와 값을 한 쌍으로 저장하고, 키를 사용해 데이터를 빠르게 찾는 자료구조라고 설명한다.배열에서 상품을 하나씩 확인하는 대신 상품 ID로 바로 조회할 수 있다. 해시 테이블의 평균 조회 시간은 O(1)이므로 빠르다는 설명도 입문 단계에서는 충

스택을 처음 배우면 나중에 넣은 데이터를 먼저 꺼내는 자료구조라고 설명한다.push()로 데이터를 쌓고 pop()으로 가장 최근 데이터를 꺼낸다. 접시를 위로 쌓았다가 위에서부터 꺼내는 모습으로 이해하면 LIFO(Last In, First Out)의 동작을 쉽게 기억할