Enum 클래스 Enum은 열거형으로 불리며 서로 연관된 집합을 의미한다. 자바의 Enum은 아래와 같은 장점을 가진다. 열거체를 비교할 때 실제 값 뿐 아니라 타입까지도 체크한다. 열거체의 상수값이 재정의 되더라도 다시 컴파일할 필요가 없다 인스턴스 생성과 상속을 방지하여 상수값의 타입 안정성이 보장된다 enum 키워드로 구현의도가 열거임을 확실히 알 수 있다. Enum의 사용 enum 키워드를 사용하여 열거체를 정의하고, Enum이름.상수이름 으로 사용할 수 있다. enum Color { RED, BLUE, GREEN } public class Main { public static void main(String[] args) { System.out.println(Color.RED); System.ou..
스프링의 핵심 철학 자바 엔터프라이즈 기술의 혼란 속에서 잃어버렸던 객체지향 기술의 진정한 가치를 회복 객체 지향 프로그래밍이 제공하는 폭 넓은 혜택을 누릴 수 있도록 기본으로 돌아가는 것 관심사의 분리 변경이 일어날 때 필요한 작업을 최소화 하기 위해서는 분리와 확장을 고려한 설계가 필요하다 관심사의 분리는 친한 객체는 모이게하고, 관심이 다른 객체는 떨어져 서로 영향을 주지 않도록 하는 것이다 템플릿 메소드 패턴 상속을 통해 슈퍼 클래스의 기능을 확장할 때 사용하는 대표적인 방법 변하지 않는 기능은 추상클래스에 만들어두고 자주 변하며 확장할 기능은 서브 클래스에 만들어 둔다 슈퍼 클래스에서는 추상 메소드 혹은 오버라이드 가능한 메소드를 정의해둔다 서브 클래스에서 선택적으로 오버라이드할 수 있도록 만든..
2021년 카카오 공채 카드 짝 맞추기 해설입니다 최소한의 키 조작으로 카드들을 모두 제거하는 문제입니다. 카드를 선택하는 경우는 두 가지입니다. 어떤 값을 지닌 카드를 선택해야 하는 가? 같은 값을 지닌 두 개의 카드 중 어느 카드를 먼저 선택해야 하는 가? 1번의 경우는 board의 크기가 4*4 이며 카드 값의 범위가 1~6 이기 때문에 permutate를 통한 완전탐색으로 해결할 수 있습니다. 2번의 경우 출발점 -> 카드1 -> 카드2의 키 조작 횟수와 출발점 -> 카드2 -> 카드1의 키 조작 횟수 중 작은 것을 선택하면 됩니다. 최소한의 키 조작 횟수를 구해야하기 때문에 BFS 알고리즘을 사용할 수 있습니다. 자바에서는 카드의 위치를 저장할 자료구조를 Point Class로 하고 파이썬에서는..
2021년 카카오 공채 광고 삽입 해설입니다 광고의 누적 시청 시간이 MAX가 되는 시작 시간을 구하는 문제입니다. 누적된 시청 시간까지 구할 필요 없이 누적 시청 인원만 구하면 됩니다. 문제를 단순화 하면 전체 구간에서 특정 길이 만큼의 구간 합이 가장 큰 구간을 구하는 것입니다. 전체 구간을 배열로 만들기 위해 주어진 "HH:MM:SS" 문자열을 모두 초(Second)로 변환합니다. 그리고 logs에 기록된 시청 시간을 초로 변환하여 배열에 기록합니다. 배열에 시청 인원을 기록하는 방법은 두 가지가 있습니다. 시작과 끝 마킹 후 합하기 시청 시작 시간에 1을 더하고, 끝 시간에 -1을 더하는 방법입니다. 마킹이 끝난 후 현재 원소에서 이전 원소의 값을 더하면 전체 구간에서 누적 시청자 수를 구할 수 ..
2019년 카카오 공채 길 찾기 게임 해설입니다 트리를 구성하고 전위 순회와 후위 순회의 결과를 반환하는 문제입니다. 전위, 중위, 후위 순회는 기초적인 트리 순회 방법이기 때문에 모르시는 분들은 찾아서 공부하셔야 합니다. 이 문제의 핵심은 정렬 그리고 트리 노드 추가입니다. 정렬을 통해 트리의 루트를 구하고 노드의 Level에 맞게 왼쪽, 오른쪽 자식 노드를 추가할 수 있습니다. 따라서 배열을 y 좌표에 따라 내림 차순으로 정렬합니다 y 좌표의 값이 같을 경우, x 좌표에 따라 오름 차순으로 정렬합니다. 부모와 자손 노드의 x 좌표 값을 비교합니다 부모의 x 좌표가 더 클 경우 자손 노드는 부모의 왼쪽 서브트리의 노드 중 하나입니다. 부모의 왼쪽 자식 노드가 없을 경우 자손 노드는 부모의 왼쪽 자식 노..
2020년 카카오 공채 기둥과 보 해설입니다 2차원 가상 벽면에 기둥과 보를 이용한 구조물을 설치하는 문제입니다. 특정 알고리즘 지식을 요구하는 문제는 아니고 기둥과 보를 설치할 수 있는 조건을 잘 이해하고 적용하면 해결할 수 있습니다. 기둥과 보를 설치할 수 있는 조건은 아래와 같습니다. 기둥은 바닥 위에 있거나 보의 한쪽 끝 부분 위에 있거나, 또는 다른 기둥 위에 있어야 합니다. 보는 한쪽 끝 부분이 기둥 위에 있거나, 또는 양쪽 끝 부분이 다른 보와 동시에 연결되어 있어야 합니다. 위 조건을 (x, y, a)의 튜플로 나타내 보겠습니다. for x, y, a in installed: if a == 0: # 기둥을 설치할 경우 if y == 0 or # 바닥에 기둥을 설치한다 (x, y - 1, 0..
오늘은 동등성 비교와 동일성 비교가 무엇인지, 자바에서는 이러한 기능을 어떻게 제공하는 지에 대해서 작성해보도록 하겠습니다 객체 먼저 객체에 대한 이야기를 해야하 것 같습니다. OOP에서 객체는 프로그램의 기능을 담당하는 독립적인 존재이며, 메시지 교환을 통해 프로그램이 동작합니다. 객체를 구성하는 요소는 상태, 행동, 식별자입니다. 상태: 객체의 정보 집합 행동: 객체의 상태를 변화시키며, 상태에 의존적이다 식별자: 객체를 구분하는 상태 상태는 객체의 정보 집합입니다. 예를 들어, 사람의 경우 키와 몸무게 이름 등이 상태가 될 수 있습니다. 단순한 값만 상태가 될 수 있는 것은 아닙니다. 한 사람이 음료수를 가진다면, 음료수에 대한 정보도 객체의 상태 중 하나가 될 수 있습니다. 행동은 상태 값을 변화..
List를 조회하며 원하는 객체를 삭제할 때 볼 수 있는 예외입니다. 자바 도큐먼트의 설명을 발췌하면 아래와 같습니다. This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible. 한 객체에 대하여 동시 수정이 허가되지 않았음에도, 그러한 경우가 포착되면 발생하는 예외입니다. 이 문장만 보면 싱글 스레드 환경에서 발생하지 않는 예외라고 생각할 수 있지만, 더 읽어보면 아래와 같은 문장을 볼 수 있습니다. For example, if a thread modifies a collection directly while it ..
에러 상황 Spring boot application을 실행하면 아래 에러가 발생하여 서버가 동작하지 않는다. Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 에러 분석 datasource의 url이 특정되지 않고, 내장 datasource 설정이 없다. 따라서 데이터베이스 연결 설정을 해줘야한다. h2 데이터베이스 연결 설정하면 될 것 같다. 에러 해결 1. 데이터베이스 파일 생성 https://www.h2database.com 에서 h2 데이터베이스 다운로드 h2 웹 콘솔을 열고 jdbc:h2:~/[데이터베이스이름] 으로 최소 한번 접속 ~/[데..
참고: https://www.acmicpc.net/problem/11066 11066번: 파일 합치기 소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본 www.acmicpc.net DP로 해결해야 하는 문제이기 때문에 점화식을 세우는 것이 중요합니다. 점화식은 아래와 같습니다 DP[i][j]: files[i]에서 files[j]까지 합치는 총 비용 1 2 3 4 의 파일들이 존재할 때 files[0]에서 files[3]까지 파일을 합치는 방법은 여러가지가 있습니다. (1 + 2) + (3 + 4) 1 + ((2 + 3) + 4) (1 + (2 + 3)) + ..