전체 글
-
[BOJ] 캐슬디펜스Algorithm/BOJ 2020. 2. 13. 15:06
[17135] 캐슬디펜스 https://www.acmicpc.net/problem/17135 게임이 진행되는 곳은 크기가 NXM인 격자판이다. 각 칸에 포함된 적의 수는 최대 하나이며, N+1행의 모든 칸에는 성이 있다. 성을 적에게서 지키기 위해 성이 있는 칸(N+1)에 궁수 3명을 배치하려고 한다. 궁수가 공격하는 적은 거리가 D이하인 적 중에서 가장 가까운 적이고 공격받은 적은 게임에서 제외된다. 궁수의 공격이 끝나면, 적은 아래로 한 칸 이동하며 성이 있는 칸으로 내려간 경우에는 게임에서 제외된다. 모든 적이 격자판에서 제외되면 게임이 끝난다. 입력 : N(행) M(열) D(거리 제한), NxM(격자판의 상태) 출력 : 궁수의 공격으로 제거할 수 있는 적의 최대 수 Solution permutat..
-
프레임워크 vs 라이브러리Programming/TIL 2020. 2. 12. 21:21
자동차는 프레임워크, 망치는 라이브러리 자동차는 특정 목적으로 만들어져서 목적지로 빠르게 갈 수 있는 역할만 하지만, 망치는 두드린다는 행위 하나로 사람을 때릴때도 쓸 수 있고, 못질을 하거나 필요에 따라 사용할 수 있다. 자동차를 가지고 삽질을 할 수 없고 무언가를 두들길 수도 없다. 그저 목적지 까지 빠르게 데려다주는 수단일 뿐이다. 만들어질 때 부터 이러한 용도로 만들어졌기 때문이다. 즉 매뉴얼대로 조작하면 최대의 효율로 목적지까지 데려다 주는 것이 프레임워크이다. 하지만 망치는 용도에 따라 여러가지의 형태로 쓰일 수 있다. 프레임워크는 라이브러리와는 다르게 프로그래밍 규칙이 이미 정해져 있는 것이다. 말그대로 프레임워크는 골격, 라이브러리는 도구 프로그램을 만들기 위해 프레임워크를 토대로 골격에 ..
-
Domain Object, DAO, DTO,Programming/TIL 2020. 2. 12. 21:07
Domain Object 도메인 객체란 내가 개발하고자 하는 영역을 분석하고, 그 분석의 결과로 도출된 객체들을 말한다. 예를 들어, 쇼핑몰을 만든다고 했을 때 쇼핑몰의 주된 기능인 상품 구매에 사용되는 객체인 Member, Product, Purchase 등을 도메인 객체라고 할 수 있다. DAO(Data Access Object) DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 객체 DB에 대한 접근을 DAO를 통해서만 하도록 만들어 다수의 원격 호출을 통한 오버헤드와 호출 문제를 줄일 수 있다. DTO(Domain Transfer Object) 계층간 데이터 교환을 위한 객체. 일반적인 DTO는 로직을 갖고 있지 않다. 순수한 데이터 객체이며 속성과 그 속성에 접근하기 위한 set..
-
MVC 패턴과 Layerd ArchitectureProgramming/TIL 2020. 2. 12. 18:47
MVC 패턴이란? MVC는 Model View Controller의 약자이다. Model은 어플리케이션이 무엇을 할 것인지 정의하며 비즈니스 로직을 가지고 있다. - 처리되는 알고리즘, DB, 데이터 등 Contoller는 사용자로 부터 어떤 요청을 처리할지 모델에 알려주고, 처리한 데이터를 뷰가 화면에 출력할 수 있도록 전달하는 역할을 한다. View는 화면에서 입력을 받거나 Model로 부터 요청 처리된 결과를 출력하는 역할을 한다. MVC 디자인 패턴의 장점은 Model과 View를 분리함으로써 비즈니스 로직과 UI 요소를 분리해 서로 영향없이 개발하기 수월하다는 것이다. Layerd Architecture란? Layerd Architecture는 중복으로 개발되는 요소를 별도의 Service 객체..
-
[BOJ] 배열 돌리기 3Algorithm/BOJ 2020. 2. 11. 21:06
[16935] 배열 돌리기 3 https://www.acmicpc.net/problem/16935 d크기가 N x M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1. 상하 반전 2. 좌우 반전 3. 오른쪽으로 90도 회전 4. 왼쪽으로 90도 회전 5, 6. 배열을 크기가 N/2 x M/2인 4개의 부분 배열로 나누어 시계방향, 반시계방향으로 이동 Solution 문제 조건에 맞추어 구현하였다. 하면서 너무너무너무 풀기 싫었다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46..
-
[BOJ] 배열 돌리기 1Algorithm/BOJ 2020. 2. 10. 22:39
[16926] 배열 돌리기 1 https://www.acmicpc.net/problem/16926 배열의 크기(N,M), 회전의 수(R), 배열 정보가 주어졌을 때 배열을 반시계 방형으로 R번 회전시킨 결과를 구하는 문제 Solution 코테에서 자주 나오는 유형이니 외워두자. 시간 안습 소스코드 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859import java.util.Scanner; public class Main { static int n, m, r; static int[] dx = { 0, 1, 0, -1 }; static int[] dy = { 1..
-
[BOJ] 게리멘더링Algorithm/BOJ 2020. 2. 10. 00:53
[17471] 게리멘더링 https://www.acmicpc.net/problem/17471 백준시는 N개의 구로 나누어져 있고, 1번부터 N번까지 번호가 매겨져 있다. 문제 조건 1. 구역을 두 개의 선거구로 나워야 하고, 선거구는 구역을 적어도 하나 포함해야 한다. 2. 한 선거구에 포함되어 있는 구역은 모두 연결되어야 한다. 공평하게 선거구를 나누기 위해 선거구에 포함된 인구의 차이를 최소로 하려고 한다. 위 조건을 만족하는 인구 차이의 최솟값을 구하는 문제 Solution permutation()을 사용한 DFS 풀이 방법 permutation()으로 두 개의 선거구를 나누었고, DFS를 사용해 선거구역의 연결 여부를 확인하였다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14..
-
[BOJ] 캠프 준비Algorithm/BOJ 2020. 2. 8. 23:15
[16938] 캠프 준비 https://www.acmicpc.net/problem/16938 캠프에 사용할 문제를 고르는 방법의 수를 구하는 문제 N : 가지고 있는 문제 수 L : 문제 난이도 하한 R : 문제 난이도 상한 X : 가장 쉬운 문제와 가장 어려운 문제 난이도 차이 1. 문제는 두 문제 이상 2. 뽑은 문제의 난이도는 L 이상 R 이하 3. 가장 쉬운 문제와 가장 어려운 문제의 난이도 차이는 X와 같거나 커야한다. Solution permutation 활용 문제 문제는 두 문제 이상이어야 하기 때문에 2 ~ N까지 size를 바꿔가면서 permutation() 함수를 돌렸다. 뽑은 문제를 temp 리스트에 담아 문제의 조건에 부합하면 count++를 해주었다. 소스코드 import java..