문제는 여기서 볼 수 있다. Dynamic Programming을 사용하도록 만든 문제인데, Solution 작성을 정말 잘 해놨다. 이 글은 해당 Solution을 한글로 풀어 작성했으며, Solution 페이지에는 Java 코드만 있기 때문에 참고하여 Python 코드를 작성했다. 문제 입력 값으로 음수가 아닌 정수로 구성된 nums 라는 배열이 들어온다. 문제에서 요구하는 것은, 배열의 가장 첫 번째 인덱스부터 시작하여 배열의 가장 끝 인덱스까지 도달할 수 있는지의 여부를 return 하면 된다. 얼마만큼의 인덱스를 이동하는 지에 대한 것은, 최대 현재 위치한 인덱스의 원소만큼 오른쪽으로 인덱스를 움직일 수 있다. 예를 들어, [2, 3, 1, 1, 4]라는 배열이 있을 때, 0번째 인덱스(2)에서..
Study

지난 2편에 이어 Garbage Collection(이하 GC, 가비지 컬렉션)의 알고리즘 중 Tracing GC(추적 기반)에 대해 알아본다. Tracing GC에서는 아래 알고리즘들에 대해 작성할 예정인데, 꽤나 많은 양이 예상되므로 두 편으로 글을 나눠 쓰려고 한다. - Mark-Sweep Algorithm - Mark-Sweep-Compact Algorithm - Tri-color Marking Algorithm (Incremental GC) - Copying Algorithm (Incremental GC) - Generational Algorithm (Incremental GC) 이 글에서는 Reference Counting GC를 보완하며 만들어진 Tracing GC의 원조격 알고리즘이라 할 ..

Easy 난이도라 만만하게 봤다가 혼났다. 딱 이런 부류의 문제를 위한 알고리즘이 있더라. 문제는 여기서 볼 수 있다. 문제 입력 값으로는 nums라는 배열이 들어오고, 배열 안에는 최소 하나의 정수가 존재한다. 배열 원소들 중 연속되는 subarray의 합이 최대가 되는 것을 찾아 return 해야 한다. 예를 들어, 입력값으로 [-2, 1, -3, 4, -1, 2, 1, -5, 4]가 들어오면 subarray 중 [4, -1, 2, 1]의 합이 6으로 합이 가장 크기 때문에 6을 return 하면 된다. 편의를 위해 배열의 길이는 N이라 가정한다. 해결 방법 - (1) Brute Force 누구나 쉽게 생각할 수 있는. 흔히 노가다라고 부르는 방법이다. 너무나 쉬운 방법이므로 따로 코드는 안 남긴다...
최근 바쁘다는 핑계로 운영 업무를 할 때 안이했던 것 같다. 고도화 프로젝트를 시작하며 운영에 배포하는 횟수가 잦게 되었는데, 크게 두 가지 실수를 저질렀다. 다시금 그러한 실수들을 반복하지 않기 위해 글을 작성한다. 첫 번째 실수 QA 환경에서 충분히 테스트하지 않았다. 요즘 협력사 개발 인력들이 갑자기 우르르 충원되어 내가 직접 개발하는 일은 줄어들었다. 협력사 분들에게 개발을 맡기는 대신, 나는 주로 앞 단에서 비즈니스를 처리하고 있다. (개발을 많이 해보고 싶은데..) 다들 고수의 향기를 풍기고 실제로 고수 분들이기도 하셔서, 문의가 와서 수정 및 추가한 기능들을 QA 환경에서 충분히 테스트하지 않았다. 결국 그들도 사람이라 한 번에 100% 완벽하게 완성할 수 없기 때문에 감안하여 확인을 했었어..

지난 1편에 이어, 이번 글부터 본격적으로 Garbage Collection(이하 GC, 가비지 컬렉션)의 알고리즘에 대해 작성한다. 작동 방식에 따라 크게 아래 두 가지로 분류 가능한데, 1. 추적 기반 GC (Tracing Garbage Collection) 2. 참조 횟수 카운팅 GC (Reference Counting Garbage Collection) 2번부터 먼저 알아본다. Reference Counting GC 개념 Reference Counting GC는 GC의 초기 알고리즘으로, "Garbage를 발견하는 것"에 초점이 맞추어져 있다. 어느 한 메모리가 다른 메모리를 얼마나 많이 참조하는지 횟수를 세어서 메모리 접근 가능과 불가능을 나누는 방식이다. 예를 들어, A 메모리가 B 메모리를 ..
면접 단골 질문인 Garbage Collection(이하 GC, 가비지 컬렉션)에 대해 알아본다. 이 글에서는 글 제목처럼, 개념 / 유래 / 한계 / GC에 대해 알아야 하는 이유 등에 대해 알아본다. 개념 Garbage Collection, 메모리 관리 방법 중 하나로 말 그대로 쓰레기를 수집하는 기능이다. 여기서 "쓰레기"란 실제 쓰레기를 말하는 것이 아니라, 개발자가 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 영역을 말하며, 가비지 컬렉션은 그러한 영역을 자동으로 찾아내어 해제하는 기능이다. 보통 메모리에 접근이 불가능하면 "쓰레기"로 본다. 오래된 프로그래밍 언어 중 하나인 LISP의 아버지라 불리는 존 매카시가 1959년에 LISP의 메모리 관리를 위해 처음 만들었다고 알려져 있다...
최근 운영 업무를 하며 두 컬럼을 하나의 컬럼으로 합쳐 DB 데이터를 가공하여 조회할 일이 있었다. 저렇게 말만 써놓으니까 헷갈리는데, 나랑 비슷한 고민을 한 okky의 글을 참고하면 된다. 내가 하고자 했던 것과 똑같은 질문이고, 해당 글 가장 아래 답변에 쿼리가 작성되어 있다. (AS-IS) 데이터 포맷 내가 가공하려던 기존 데이터 포맷은 아래와 같다. TYPE PLANT TOTAL M1 M2 M3 M4 M5 M6 M7 M8 M9 M 10 M 11 M 12 1 A China 25 3 4 5 2 B China 3 C China 4 D China 5 E China 6 A Brazil 7 B Brazil 8 C Brazil 9 D Brazil 10 E Brazil 어우, TOTAL부터 M1~M12까지의 숫..
드디어.. 본래 작성하려던 주제였던 HashMap과 HashSet의 차이점에 대해 알아본다. 그전에 작성했던 아래 네 글을 보면 더욱 좋다. (1) collections란? (2) Set, Map 이란? (3) HashMap이란? (4) HashSet이란? HashMap과 HashSet의 차이점은 크게 아래 6가지로 나눌 수 있다. 1. 정의 HashMap은 Map 인터페이스의 구현체로, HashTable과 유사한 자료구조로 데이터를 저장한다. HashSet은 Set 인터페이스의 구현체로, 내부적으로 HashMap을 사용하기 때문에 HashTable과 유사한 자료구조로 데이터를 저장한다. 2. 데이터 저장 형태 HashMap은 Key-Value 쌍 형태로 데이터를 저장하며, Key와 Value의 mapp..
이번 글에서는 1편, 2편, 3편에 이어 HashSet에 대해 작성한다. 아래 글을 읽기 전에 위 세 글을 순서대로 읽고 오는 것을 추천한다. HashSet 이란? 개념 HashMap의 개념과 마찬가지로, 내부적으로 Hash(해시)를 사용하는 Set 인터페이스의 구현체이다. Set(집합) 이라는 단어를 포함한 만큼 집합적인 개념의 데이터 구조이다. 구현 아래처럼 HashSet이 구현되어 있는 Java 코드를 보면 놀랍게도 HashMap을 사용한다. // predefined HashSet class public class HashSet { // A HashMap object private transient HashMap map; // A Dummy value(PRESENT) to associate with..