분류 전체보기
백트래킹
백트래킹
2022.07.22처음 접했을 때 이해하기 쉽지 않은 알고리즘이다. 재귀함수를 활용해 구현하는 경우가 많고, 함수 종료 조건 / 재귀 호출 부분 두 가지를 잘 고려해 함수를 디자인하자. 확률과통계 과목에서 수열을 나열하거나, 논리회로나 계산이론 과목에서 accept할 수 있는 언어를 찾을 때 해당하는 수 또는 단어들을 나열할 때 수형도를 사용하는데, 여기서 사용하는 수형도가 백트래킹과 깊게 연관되어있다. import java.io.*; import java.util.*; public class Main { static int N, K; static ArrayList list = new ArrayList(); public static void main(String[] args) throws Exception { Buffer..
ArrayList에서 원소 제거
ArrayList에서 원소 제거
2022.07.21ArrayList 에서 원소 제거 시 제거된 인덱스를 채우기 위해 제거된 원소 뒤에 위치한 원소들이 한 칸 씩 당겨진다. 이 부분을 잘 생각해 원소 제거 시 인덱스를 적절히 조작해야 한다. 제거 후 반복문의 변수를 1 줄인다거나.. 제거하는 인덱스를 고정시켜놓는다거나.. ArrayList에서 원소를 제거할 때 원소의 인덱스를 기준으로 제거 할 수도 있고, 원소의 내용을 기준으로 제거 할 수 있다. 인덱스로 제거하는건 쉬우니 넘어가고, 원소의 내용을 기준으로 제거 할 때는 보통 리스트에 제네릭스 타입으로 객체 타입이 들어가 있을 경우일텐데, 같은지 판단하는 기준은 객체에 정의된 equals메서드이다. class Marble{ int r, c; Marble(int r, int c){ this.r = r; t..
격자 탐색
격자 탐색
2022.07.21시뮬레이션 유형에서 많이 등장하는 내용이다. dr = {-1, 1, 0, 0} dc = {0, 0, -1, 1} dr dc배열을 선언하고 탐색 시 사용한다. (문제에 따라 숫자를 넣는 순서는 바뀔 수 있다..) ex.1) 배열에 그림과 같이 숫자를 넣는 경우를 생각해보자. import java.io.*; import java.util.*; public class Main { static int[] dr = {1,0,-1,0}; static int[] dc = {0,-1,0,1}; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System..
[백준] 1786 찾기 - Java
[백준] 1786 찾기 - Java
2022.07.19문제가 제발 kmp알고리즘으로 풀어달라고 한다.. kmp알고리즘은 접두사와 접미사가 최대로 같을 수 있는 길이를 찾고... 이 길이를 바탕으로 완전탐색으로 해결할 문제를 훨씬 빠르게 해결할 수 있게 하는 알고리즘인데.. 구현이 까다롭진 않아서 몇 번 해보면 외워진다. 모르면 틀려야되지만 알면 쉽게 풀 수 있는 문제다. import java.util.*; import java.io.*; public class Main { static ArrayList list; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Strin..
[백준] 13460 구슬 탈출 3 - Java
[백준] 13460 구슬 탈출 3 - Java
2022.07.15지난번에 풀었던 구슬 탈출 2를 조금 변형해서 풀 수 있다. Marble클래스에서 지금까지의 방향을 저장하는 요소인 cmd를 만들고 진행하자. return 직전에 현재 방향을 추가해 return을 진행해 마지막 방향까지 고려 할 수 있도록 했다. import java.io.*; import java.util.*; public class Main { static int N, M; static char[][] map; static boolean[][][][] visit; static int[] dr = {-1,1,0,0}; static int[] dc = {0,0,-1,1}; static int hole_r, hole_c; static Marble red, blue; static String an; stat..
[백준] 13460 구슬 탈출 2 - Java
[백준] 13460 구슬 탈출 2 - Java
2022.07.151. dr dc 설정 후 한 칸씩 이동하지 않고 갈 수 있는 최대한 진행한다. 2. 빨간 구슬과 파란 구슬이 이동한 후 같은 위치에 있으면 방향과 시작 위치에 따라 위치를 설정해준다. 3. 최단거리를 구하는 경우는 bfs를 사용해 탐색을 진행하는게 유리하다. visit배열은 4차원으로 설정한다. 방문 여부를 기록할 때 빨간 구슬의 위치와 파란 구슬의 위치가 서로 영향을 주기 때문.. 3차원배열로 설정해도 잘 처리해주면 괜찮긴 한데 4차원배열을 사용하는 쪽이 좀 더 깔끔하다. import java.io.*; import java.lang.reflect.Array; import java.util.*; public class Main { static int N, M; static char[][] map; st..
[Spring Basic] 동기와 비동기
[Spring Basic] 동기와 비동기
2022.07.15데이터를 주고받을 때 XML을 자주 사용했는데, XML은 사용하기 복잡하고 태그를 많이 사용해야 해서 XML보다 간단하게 사용할 수 있는 JSON 형식을 사용한다. JavaScript객체를 서버로 전송하려면 데이터를 전송하기 편한 형식으로 먼저 변환하는 직렬화 과정이 필요하고, 서버가 보낸 데이터를 JavaScript 객체로 변환할 때는 역직렬화가 수행된다. 자바와 자바스크립트간의 데이터 교환을 수행하려면 Jackson, stringify, parse 등 라이브러리와 내장 메서드를 사용해 직렬화와 역직렬화를 수행한다. 동기 방식은 작업을 순차적으로 처리하는 방식이고, 비동기 방식은 여러 작업을 동시에 처리하는 방식이다. 동기 방식은 한 번에 하나의 작업만 처리할 수 있다. 특정 작업이 수행중일 경우 다음..
[Spring Basic] MyBatis
[Spring Basic] MyBatis
2022.07.12MyBatis는 자바 코드와 SQL을 매핑해주는 프레임워크다. SQL문을 별도의 xml파일로 분리해 자바 코드에서 SQL을 직접 작성하지 않고 간편하게 작성할 수 있게 도와준다. MyBatis가 JDBC드라이버를 사용해 DB와 통신하고, Spring을 사용할 때는 MyBatis와 Spring을 연결해주는 mybatis-spring을 설치해 사용한다. MyBatis를 사용하기 전에는 SQL 구문을 자바의 String 객체에 직접 저장하고 SQL을 데이터베이스에 보내는 방식으로 데이터베이스와 통신했었지만, MyBatis가 도입된 이후부터는 xml에 SQL을 작성해 데이터베이스와 통신한다. MyBatis에서 SqlSession을 생성하려면 SqlSessionFactory 의 구현체가 필요하다. SqlSessi..
row, column / x, y
row, column / x, y
2022.07.12이차원 배열을 설정하고 좌표평면을 탐색할 때 r,c로 탐색할지 / x,y로 탐색할지.. 사실 두 가지 모두 같은 말이긴 하다. 문제에 따라서 다른 방법으로 접근하면 좋다. 수학에서 그래프 그리듯 접근할 때는 x y를 사용하고, 행렬 느낌으로 접근할 때는 r c를 사용하면서... 이에 따라서 탐색에 유용한 dx dy dr dc배열도 새롭게 정의해 줄 수 있다. 나는 r,c를 자주 사용하긴 하지만 문제에 따라서는 x,y로 보고 풀어야 할 때도 있다.
[Spring Basic] DAO Repository DTO VO Entity
[Spring Basic] DAO Repository DTO VO Entity
2022.07.09DAO, Repository 데이터에 접근하기 위한 객체를 DAO (Data Access Object) 라고 한다. DAO를 사용해 데이터베이스에 있는 테이블로부터 CRUD를 수행한다. 데이터베이스 테이블 하나당 하나의 DAO를 작성하고, Controller에서 DAO를 통해 데이터베이스를 다룬다. 컨트롤러에서 바로 데이터베이스에 접근하도록 할 수도 있지만, 이 경우 중복되는 메서드들이 많이 발생할 수 있다. 중복되는 내용을 DAO로 따로 정리해놓고, 컨트롤러가 DAO를 통해 데이터베이스에 접근하도록 하는 편이 합리적이다. 이를 계층의 분리라고 부르고 DAO는 Persistence Layer, 컨트롤러를 Presentation Layer라고 부른다. DAO 계층에서 데이터베이스 연결, 쿼리 실행, 등 데..
dp팁
dp팁
2022.07.09당연한거지만.. 문제 많이 풀어보는게 정말 많이 도움 됨. 점화식 잘 안나오면 하나하나 종이에 하나하나 해보기. 수능수학에서 수열 문제 풀듯.. 일단 적은 후 규칙 찾는 방법 괜찮음. 규칙이 대충 보이면 dp배열 디자인하기.
[Spring Basic] JUnit Test Framework
[Spring Basic] JUnit Test Framework
2022.07.09개발 방법론 중 TDD (Test-Driven Development) 는 애플리케이션에 기능을 추가하기 전에 기능이 작동하는 테스트케이스를 먼저 작성하고 테스트를 통과하는 소스코드를 작성하는 방식의 개발 방법을 의미한다. 테스트를 먼저 추가하는 방식으로 개발해 견고한 코드를 작성할 수 있고 이후 추가로 기능을 개발했을 때 이미 작성한 테스트를 실행시켜 새로 개발한 기능에 Side Effect가 없는지 검증할 수 있다. JUnit은 자바로 작성한 애플리케이션을 작은 단위로 나눠서 테스트 할 수 있게 해 주는 도구이다. 간단한 테스트는 자바로 비즈니스 로직 작성하듯 테스트 할 수 있지만 테스트 할 때 데이터베이스를 연동하고 여러 가지 무거운 객체들을 DI 받아야 하는 경우는 테스트를 가볍게 돌리기 위해 Mo..