Home
알고리즘 개념

[Java] 코딩테스트 대비 알고리즘 추천 필수 문제

✔️ 코딩테스트 대비 알고리즘 추천 필수 문제01. Data Structure[2800] 괄호 제거[7662] 이중 우선순위 큐[2493] 탑[21939] 문제 추천 시스템 Version 1[22942] 데이터 체커[2696] 중앙값 구하기02. Tree[1068] 트리[5639] 이진 검색 트리03. Math[22943] 수04. Greedy[11000] 강의실 배정[13164] 행복 유치원05. Dynamic Programming[15486] 퇴사 2[9084] 동전[1106] 호텔[12865] 평범한 배낭06. Two Pointer[2470] 두 용액[22862] 가장 긴 짝수 연속한 부분 수열 (large)07. Implementation[21608] 상어 초등학교[21611] 마법사 상어와 블리..

알고리즘 실전

[2696] 중앙값 구하기

✔ 중앙값 구하기[백준 2696]코드 구현하기/* * 문제 분석하기 * : 중앙값과 중앙값보다 큰 값을 저장할 우선순위 큐와 작은 값을 저장할 우선순위 큐를 생성한 후 * 값을 저장하고 교환하며 중앙값을 찾도록 함 *//* * 손으로 풀어보기 * 1. 중앙값과 중앙값보다 큰 값을 저장할 우선순위 큐와 작은 값을 저장할 우선순위 큐를 생성 * 2. 두 우선순위 큐의 크기가 같다면 큰 값을 저장하는 우선순위 큐에 걊을 저장 * 3. 두 우선순위 큐의 크기가 다르다면 작은 값을 저장하는 우선순위 큐에 값을 저장 * 4. 큰 값을 저장하는 우선순위 큐의 최소값과 작은 값을 저장하는 우선순위 큐의 최대값을 비교 * 5. 작은 값을 저장하는 우선순위 큐의 최대값이 더 클 경우, 이 값으로 중앙값이 갱신되므로 ..

알고리즘 실전

[22942] 데이터 체커

✔ 데이터 체커[백준 22942]코드 구현하기/* * 문제 분석하기 * : 모든 원의 중심 좌표는 x축 위에 존재하므로 중심 좌표 기준으로 반지름의 길이를 활용해 맨 앞의 점과 맨 뒤의 점을 인덱스와 함께 저장 * 이후 좌표 순으로 정렬하여 스택에 넣으며 같은 원의 점 끼리 모두 짝이 맞아 스택이 비었다면 YES * 아니라면 원 사이에 다른 점이 있는 것이므로 NO를 출력 *//* * 손으로 풀어보기 * 1. 중심 좌표 기준으로 반지름의 길이를 활용해 맨 앞의 점과 맨 뒤의 점을 인덱스와 함께 저장 * 2. 좌표 순으로 정렬하여 스택에 넣으며 같은 원의 점 끼리 모두 짝이 맞는지 확인 * 3. 모두 짝이 맞아 스택이 비었다면 YES, 아니라면 원 사이에 다른 점이 있는 것이므로 NO를 출력 */..

토비의 스프링 3.1

[토비의 스프링 3.1] Vol. 1 스프링의 이해와 원리 - 목차

1장. 오브젝트와 의존관계주요 키워드- 관심사의 분리 (리팩토링)- 전략 패턴- 개방 폐쇄 원칙- 낮은 결합도, 높은 응집도- 제어의 역전 (IoC)- 싱글톤 레지스트리- DI 컨테이너- 의존 관계 주입 (DI)- 생성자 주입과 수정자 주입- XML 설정1.0) 개요1.1) 초난감 DAO1.2) DAO의 분리1.3) DAO의 확장1.4) 제어의 역전(IoC)1.5) 스프링의 IoC1.6) 싱글톤 레지스트리와 오브젝트 스코프1.7) 의존관계 주입(DI)1.8) XML을 이용한 설정2장. 테스트주요 키워드- 테스트 자동화- JUnit 프레임워크- 테스트 일관성- 테스트 포괄성- 테스트 수행 간격- 테스트 주도 개발 방법- 테스트 코드 리팩토링- 테스트 메소드- 스프링 테스트 컨텍스트 프레임워크- 애플리케이션..

토비의 스프링 3.1

[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 프로젝트 시작하기 (3)

9.3) 애플리케이션 아키텍처아키텍처클라이언트와 백엔드 시스템의 종류와 사용 기술, 연동 방법을 결정했다면 시스템 레벨의 아키텍처는 대략 구성된 셈이다.다음으로 결정할 사항은 스프링 웹 애플리케이션의 아키텍처다.아키텍처의 가장 단순한 정의는 어떤 경계 안에 있는 내부 구성요소들이 어떤 책임을 갖고 있고, 어떤 방식으로 서로 관계를 맺고 동작하는지를 규정하는 것이라고 할 수 있다.아키텍처는 단순히 정적인 구조를 나타내는 것으로만 생각하기 쉽지만 실제로는 그 구조에서 일어나는 동적인 행위와 깊은 관계가 있다.계층형 아키텍처지금까지는 주로 오브젝트 레벨에서 분리의 문제에 대해 생각해보며 DI를 기반으로한 유연한 설계와 구현 전략을 해왔다.관심, 책임, 성격, 변하는 이유와 방식이 서로 다른 것들을 분리함으로써..

알고리즘 실전

[2533] 사회망 서비스(SNS)

✔ 사회망 서비스(SNS)[백준 2533]코드 구현하기/* * 문제 분석하기 * : 자식 노드부터 탐색하며 자신이 얼리 어답터가 아닐 경우와 얼리 어답터일 경우를 나누어 구하며 * 필요한 최소 얼리 어답터의 수를 구하도록 함 *//* * 손으로 풀어보기 * 1. 자식 노드부터 탐색하며 자신이 얼리 어답터가 아닐 경우와 얼리 어답터일 경우 나누어 구함 * 2. 자신이 얼리 어답터가 아닐 경우(0), 자식 노드가 모두 얼리 어답터여야 함 * 자신이 얼리 어답터일 경우(1), 자식 노드들은 얼리 어답터일 수도 있고, 아닐 수도 있음 * 3. 루트 노드까지 이를 구한 후, 필요한 최소 얼리 어답터의 수를 출력하도록 함 *//* * 2533) 사회망_서비스(SNS) */public class Ma..

알고리즘 실전

[5052] 전화번호 목록

✔ 전화번호 목록[백준 5052]코드 구현하기/* * 문제 분석하기 * : 트라이 자료구조를 사용해 모든 전화번호 목록을 저장한 후 접두사가 일치하는지 확인 * 또는 문자열을 정렬한 후 완전탐색으로 모든 문자열을 비교 *//* * 손으로 풀어보기 * 1. 트라이 자료구조에 모든 전화번호 목록 저장 * 2. 저장해둔 트라이 자료구조를 통해 각 전화번호를 입력하여 해당 전화번호가 다른 전화번호의 접두사로 포함되는지 확인 * 3. 만약 현재 입력된 전화번호의 끝 부분이 다른 전화번호에 포함되는 부분이라면 일관성이 있지 않으므로 false를 출력 * 4. 모두 일관성 있다면 true를 출력 *//* * 5052) 전화번호_목록 */public class Main { static BufferedR..

알고리즘 실전

[1922] 네트워크 연결

✔ 네트워크 연결[백준 1922]코드 구현하기/* * 문제 분석하기 * : 모든 컴퓨터를 연결할 수 있는 최소 신장 트리를 찾도록 함 *//* * 손으로 풀어보기 * 1. 크루스칼 알고리즘을 수행해 사용하지 않은 엣지 중 가중치가 가장 작은 간선을 선택 * 2. 선택한 간선을 연결했을 때 사이클이 발생하는지 판단 * 3. 간선을 더한 횟수가 정점의 개수 - 1이 될 때까지 이를 반복 * 4. 모든 컴퓨터를 연결하는데 필요한 최소 비용 출력 *//* * 1922) 네트워크_연결 */public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int N, M; ..

알고리즘 실전

[1976] 여행 가자

✔ 여행 가자[백준 1976]코드 구현하기/* * 문제 분석하기 * : 연결된 도시들을 집합으로 묶은 후, 여행 계획에 속한 도시들이 모두 같은 집합에 속하는지 확인하도록 함 *//* * 손으로 풀어보기 * 1. 연결된 도시들을 집합으로 묶기 * 2. 여행 계획에 속한 도시들이 모두 같은 집합에 속하는지 확인 * 3. 모두 같은 집합이라면 YES, 아니라면 NO를 출력 *//* * 1976) 여행_가자 */public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int N, M; static int[][] city; // city(도시의 연결 정보 배열..

알고리즘 실전

[1005] ACM Craft

✔ ACM Craft[백준 1005]코드 구현하기/* * 문제 분석하기 * : 위상 정렬 알고리즘을 이용해 각 건물까지의 건설 시간을 갱신한 후 특정 건물의 건설완료 최소 시간을 출력 *//* * 손으로 풀어보기 * 1. 위상 정렬 알고리즘을 이용해 각 건물까지의 건설 시간을 갱신 * 2. 특정 건물까지의 건설완료 최소 시간 출력 *//* * 1005) ACM_Craft */public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int N, K; static int[] time; // time(건물당 건설에 걸리는 시간 배열) static Arr..

김깅긍
GaGa-Kim