참고: https://www.acmicpc.net/problem/1915 1915번: 가장 큰 정사각형 첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다. www.acmicpc.net n * m 크기의 배열에서 1로된 가장 큰 정사각형의 크기를 구하는 문제입니다. DP를 사용하여 해결할 수 있습니다. 이미 DP로 분류되어있는 것을 알았기 때문에, 저는 바로 DP로 접근했습니다. 하지만 문제 유형에 대한 단서가 주어지지 않았다면 해결 방법을 찾는데 시간을 좀 더 많이 소비 했을 것 같습니다. 다이나믹 프로그래밍 알고리즘은 문제를 각각의 작은 문제로 나누어 해결한 결과를 저장해 뒀다가 나중에 큰 문제의 결과와 합하여 푸는 알고리즘입니다. 이러한..
스프링의 기본 개념 보다는 예제를 따라하며 스프링 부트의 기본 사용 방법에 대해서 배울 수 있는 책입니다. 빠르게 스프링 부트가 무엇인지 파악할 수 있고, 책에 나오는 키워드를 통해 필요한 지식을 습득할 수 있다는 장점이 있습니다. 하지만 개인적으로는 에러가 상당히 많습니다. 제가 구현을 못한 탓이 크겠지만, 깃허브 페이지를 찾아가보면 이슈도 상당히 많은 것으로 보아 많은 사람들이 겪고 있는 문제인 것 같습니다. 저는 결국 배포에서 막혀 끝까지 구현할 수는 없었습니다.
파이썬 언어를 기반으로 코팅 테스트와 인터뷰를 준비할 수 있는 책입니다. 파이썬으로 코딩 테스트를 준비하면서 파이써닉한 코드을 작성하고 싶고, 문제 해결을 위한 정석적인 접근 방법을 알고싶으면 구매해도 좋을 것 같습니다. 모든 문제는 리트코드의 기출 문제이며 깔끔한 문제 풀이와 해설을 볼 수 있습니다. 하지만 처음 코딩 테스트를 준비할 때 보기에는 조금 설명이 부족하다고 느낄 수 있습니다. 따라서 자료구조와 알고리즘 기본 개념을 습득한 후 정독할 것을 개인적으로 권장합니다. 최근 어려워지고 있는 코딩 테스트를 이 책 하나로 커버하기에는 어렵다고 생각하며, 책을 통해 문제 접근 방법에 대해 배우고 더 어려운 문제는 백준이나 프로그래머스와 같은 사이트에서 푸는 것이 좋을 것 같습니다.
역사의 흐름은 무엇인가? 멀티코어 CPU가 대중화 되는 등 하드웨어의 발전이 자바의 변화를 부추겼다. 자바 8이 등장하기 이전에는 유휴 코어를 사용하기 위해 스레드를 사용하려는 시도가 있었지만, 스레드를 사용하면 많은 관리상의 문제가 발생했다. 자바는 병령 실행 환경을 쉽게 관리하고 에러가 덜 발생할 수 있도록 진화하였다. 하지만 여러 개발자가 협업하여 프로그램을 만드는 이상 쉽지 않았다. 하지만 자바 8은 병렬 실행을 새롭고 단순한 방식으로 접근할 수 있는 방법을 제공한다. 이러한 방법은 이전과는 새로운 방법이기에 사용법을 익혀야한다. 그리고 자바 9에서는 리액티브 프로그래밍이라는 병렬 실행 기법을 지원한다. 리액티브 프로그래밍은 실행 환경이 한정적이지만, 고성능 시스템에서 인기를 얻고 있는 RxJav..
참고: https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 최장 공통 부분 수열 (LCS: Longest Common Subsequence) 문제입니다. 문제를 처음 보면 모든 가능한 수열을 구해서 비교하는 브루트포스 알고리즘이 떠오를 수 있습니다. 하지만 순열(Permutation) 알고리즘은 O(N!) 시간 복잡도를 가지기 때문에 적절한 해법이 아닌 것 같습니다. 그렇다면 다이나믹 프로그래밍으로 풀 ..
참고: https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 다이나믹 프로그래밍을 공부했다면 한 번쯤 풀어 봤을 배낭 문제입니다. 사실 배낭 문제는 두 가지 유형으로 나눌 수 있습니다. 하나는 배낭에 들어갈 물건을 나눌 수 있는 '분할 가능 배낭 문제' 이고, 다른 하나는 물건을 나눌 수 없는 '0-1 배낭 문제' 입니다. 위 문제는 0-1 배낭 문제에 해당하며, 분할 가능 배낭 문제..
https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (1 ≤ Si < Ti ≤ 109) www.acmicpc.net 각 수업의 시간이 겹칠 경우 강의실이 추가된다. 단, 한 수업의 끝 시간과 시작 시간이 동일하면 겹치지 않는 것으로 한다. 먼저 수업들을 시작 시간을 기준으로 정렬한다. 그리고 이미 시작한 수업을 끝나는 시간을 기준으로 우선순위 큐에 삽입한다. 이미 시작한 수업의 끝 시간과 다음에 시작할 수업의 시작 시간을 비교하며 수업이 겹치지 않는 경우, 우선순위 큐에서 수업을 제거한다. 최종적으로 우선순위 큐에는 수업 시간이 겹치는 수업들만 남아있게된다...
https://www.acmicpc.net/problem/2250 2250번: 트리의 높이와 너비 첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. www.acmicpc.net 각 트리 노드의 열 번호를 구하고, 레벨에 따라 저장한다. 그 후 레벨에 따라 열 번호의 최소, 최대 값을 구해 연산하면 전체 트리의 최대 너비를 구할 수 있다. 레벨에 따라 트리 노드의 열 번호를 저장 해야하기 때문에 Map 자료 구조를 사용해야한다. 그리고 아래 제시된 그림을 보면, 각 노드의 열 번호가 중위 순회에 따라 부여된다는 것을 알 수 있다. 따라서 트리를 중위 순회..
참고: https://leetcode.com/problems/longest-repeating-character-replacement/ Longest Repeating Character Replacement - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 참고: https://docs.python.org/3/library/stdtypes.html#range Built-in Types — Python 3.9.5 documentation The following s..
https://leetcode.com/problems/palindrome-pairs/ Palindrome Pairs - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 단어 리스트의 단어 조합 중 팰린드롬이 되는 모든 인덱스의 조합을 구하는 문제이다. 단순히 가능한 모든 조합을 구하고 팰린드롬인지 확인할 경우 해결은 가능하겠지만 시간이 오래걸린다. 따라서 문자열의 효율적인 탐색 자료구조인 트라이(Trie)를 사용해야한다. 데이터를 어떻게 저장해야할까? 일반적인 문..