본문 바로가기

분류 전체보기

(386)
[spring-core-1] 스프링 핵심 원리 이해 인프런 [스프링 핵심 원리 - 기본편]을 정리한 내용입니다. 1. 객체 지향 설계와 스프링 스프링이란? 스프링 프레임워크, 스프링 부트 등을 포함한 스프링 생태계 전체를 아우르는 말. 스프링부트? 스프링을 편리하게 사용할 수 있도록 지원 Tomcat 같은 웹서버를 내장, 별도의 웹서버를 설치할 필요 x starter 종속성 제공으로 쉬운 빌드 구성 가능 프로덕션 준비 기능 제공 관례에 의한 간결한 설정 스프링의 핵심 스프링은 자바 언어 기반의 프레임워크로 객체 지향 언어가 가진 강력한 특징을 살려낼 수 있는 프레임워크. 좋은 객체 지향 프로그래밍이란? 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파..
[boj] 백준 16236 아기 상어 - BFS [문제] https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net [풀이] 일단 조건이 많아서 복잡해 보이는데,,,흐름을 정리하자면 다음과 같다. 1. 아기 상어가 처음 위치한 곳에서 BFS를 돌린다. 아기 상어가 먹을 수 있는 물고기가 더이상 없을 때까지 반복하며 먹을 수 있는 물고기의 거리, 위치를 eat_fish vector에 저장한다. 2. BFS가 끝나면 아기 상어가 먹으러 갈 물고기를 찾는다. 1) 가장 가까운 곳에 위치한 물고기 2)..
[boj] 백준 2252 줄 세우기 - 위상정렬 [문제] https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net [풀이] 학생들의 키에 대한 관계가 주어지고 선후 관계가 없을 경우 출력 순서는 상관이 없다. 간단한 위상정렬 문제이다. [코드] #include #include #include using namespace::std; int main() { int n, m; //n명의 학생, m은 키를 비교한 회수 int in[100001]; vector nod..
[boj] 백준 2493 탑 - stack [문제] https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net [풀이] 본인의 바로 왼쪽에 있는 탑부터 비교하도록 하기 위해 stack을 이용한다. 현재 탑의 높이보다 크면 출력, 작으면 pop()을 해주고, stack이 비면 왼쪽에 있는 탑들 중 신호를 받을 탑이 없다는 것이므로 0을 출력한다. [코드] #include #include #include #include #include using namespace::std; int main() { ..
CH7(7.5). 프로퍼티 접근자 로직 재활용: 위임 프로퍼티 1. 위임 프로퍼티 class Foo { var p : Type by Delegate() } p 프로퍼티는 접근자 로직을 다른 객체에게 위임한다. Delegate 클래스의 인스턴스를 위임 객체로 사용하며 by 뒤에 있는 식을 계산해서 위임에 쓰일 객체를 얻는다. class Foo { private val delegate = Delegate() // 컴파일러가 생성한 도우미 프로퍼티 var p: Type set(Value:Type) = delegate.setValue(..., Value) get() = delegate.getValue(...) } 다음과 같이 컴파일러는 숨겨진 도우미 프로퍼티를 만들고, 그 프로퍼티를 위임 객체의 인스턴스로 초기화 한다. p 프로퍼티는 바로 그 위임 객체에게 자신의 작업을 ..
[boj] 백준 2565 전깃줄 - dp, 증가하는 수열 [문제] https://www.acmicpc.net/problem/2565 2565번: 전깃줄 첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 www.acmicpc.net [풀이] 왼쪽 전깃줄을 기준으로 정렬했을 때, 오른쪽 전깃줄에서도 똑같이 증가하는 번호만큼 전깃줄이 교차하지 않는다. 1 8 2 2 3 9 4 1 6 4 7 6 9 7 10 10 예를 들어, 다음과 같이 정렬을 하면, 오른쪽 전깃줄에서는 1, 4, 6, 7, 10 으로 계속 증가하는 형태를 띄므로 최대 5개의 전깃줄이 교차하지 않는다. 즉 8-5=3개의 전깃줄만 자르면 된다. 이는 곧 증가하는 ..
[boj] 백준 16234 인구 이동 - BFS [문제] https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net [풀이] BFS 문제. 각 나라를 모두 돌면서 BFS 탐색을 한다. 인접한 나라와의 인구수 차이가 l 과 r 사이인 연합이 가능한 나라에 대해서는 따로 queue를 선언해 넣어주고, 인구수의 합과 연합국의 개수를 카운트하는 변수를 선언해 갱신해준다. 탐색이 끝나 queue가 비면 연합국에 대해 인구수를 갱신해준다. 또한 인구 이동이 일어날 경우, flag를 true로 바꿔줘..
[boj] 백준 2110 공유기 설치 - 이분탐색 [문제] https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net [풀이] 문제를 이해 못해서 당황했으나... 가장 인접한 두 공유기 사이의 거리가 최대가 되게하라는 것은 결국 c개의 공유기를 적절한 거리를 두고 설치할건데, c개의 공유기를 설치할 때의 공유기가 설치된 집들 간 거리 중 최소 거리(가장 인접한)가 최대가 될 때의 거리를 출력하라는 것이다. 오랜만에 푸는 이분탐색 문제이다. 먼저 공유기가..