분류 전체보기
-
16197 - 두 동전Baekjoon 2022. 5. 28. 10:15
생각했던 것 문제의 모양을 보고 바로 BFS 문제라고 생각했다. 다만, 생각없이 visited 처리를 넣는 바람에 시간이 많이 걸렸다. 문제의 키 포인트는 "벽에대한 처리"와, xor를 이용한 "동전이 하나만 떨어졌을 때의 감지"이다. 추가적으로, 최소해를 찾기 위해서는 각 순회마다 따로 count를 세어줘야한다. (재귀를 사용한다면, 메소드의 파라미터에 count를 넘겨주므로 신경쓰지 않아도 됨) 나는 bfs를 반복문으로 구현했기 때문에, 각 순회마다 따로 count를 세어주었다. ++ 예전에 풀었던 7576 - 토마토 문제에서는, count를 기록해주는 배열을 따로 만들어두었다. 해당 문제에서는 벽이 없었기 때문에, 해당 방식으로 저장 할 수 있었던것 같다. 실수 4방향 BFS에서 visited는 당..
-
14888, 15685 - 연산자 끼워넣기 (1), (2)Baekjoon 2022. 5. 26. 15:52
같은 코드로도 두 문제를 모두 통과 할 수 있어서 묶어서 올리게 되었다. 생각했던 것들 일반적인 순열 문제라고 생각해서, 처음에 Input으로 들어오는 연산자들의 개수만큼 ArrayList에 넣어 둔 후, 순열로 돌면서 선택하는 방법으로 구현했다. ex) 연산자의 개수가 각각 + : 1, - : 2, * : 3, / : 4 개일 경우, 연산자 각각의 인덱스를 이용해 모두 삽입 ArrayList -> {0, 1, 1, 2, 2, 2} 와 같이 만들어두고 연산을 진행했다. 해당 코드로 연산자 끼워넣기 (1)을 통과하고나서, (2)도 똑같은 방식인것 같아 같은 코드를 넣었더니.. 오랜만에 보는 시간 초과 메세지가 보였다. 틀린 이유 틀린 이유는 생각보다 간단했다. 위의 코드에서, + 연산자를 두 번째로 선택한..
-
Spring 핵심 원리 2 - 회원 도메인 생성, 테스트Spring(Web) 2022. 5. 24. 18:49
중요하게 생각한 부분들 설계 단계에서 인터페이스와 구현체들을 잘 생각해야 한다. 이 강의에서는 회원 정보, 주문 처리, 할인 처리 와 같이 각 역할들을 나누어 다른 패키지로 관리 + 각각 인터페이스 생성 과 같은 형식으로 후에 수정하거나, 다른 사람이 해당 프로젝트에 참가하게 되어도 쉽게 알 수 있게 프로젝트를 관리한다. 이 부분이 가장 중요하다는 생각이 듦. 테스트 코드는 필수다. 실제 DB에 넣고 호출하는 부분까지는 나중에 한다고 하더라도, 적어도 멤버 객체를 저장하고 호출해 유효한지 검사하는 테스트 코드 정도는 꼭 있어야 나중에 웹 서버를 올릴 때에도 유용하다. 그리고, 프로젝트에 테스트 패키지가 따로 있기 때문에 후에 서버에 올릴 때에도 테스트 코드는 올라가지 않는다. 이 부분도 중요한듯
-
Spring 핵심 원리 1 - 객체지향 기본 개념Spring(Web) 2022. 5. 24. 18:40
앞쪽 부분은 기본적인 프로젝트 세팅이나 인터페이스 / 간단한 구현체 생성 정도였기 때문에 기록을 생략한다. 하면서 중요하다고 생각이 든 부분들 SOLID 객체지향 5대 원칙 그냥 매번 달달 외우는식으로 공부를 했었는데, 초반에 자세하게 설명해주셔서 개발시 실제로 적용되는 부분들에 대해 생각을 할 수 있었다. Single Responsibility Principle 단일 책임 원칙 하나의 클래스는 하나의 책임만을 가져야한다. Open - Closed Principle 개방 - 폐쇄 원칙 확장에 열려있어야하고, 변경에 닫혀있어야한다. 이 원칙과 아래에 나올 DIP 원칙이 가장 중요하다고 생각이 든다. 인터페이스 구현 -> 구현체 적용 과 같은 방식으로 개발을하게 되는데, 인터페이스를 잘 구현해 두면 따로 인..
-
20055 - 컨베이어 벨트 위의 로봇Baekjoon 2022. 5. 24. 18:19
풀면서 생각한것들 로봇을 내리는 때는 두 번 있다. 처음에는 벨트를 돌린 이후 바로 내리는것이 아닌 로봇을 움직이고나서 내리도록 구현해서, 원래 움직일 수 있었던 로봇들이 움직이지 못하는 경우가 생겼다. 가장 처음에 수행될 벨트 돌리기 후, 내리는 위치에 있는 로봇을 내려야 한다. 이후 로봇들이 한 칸씩 움직인 이후, 내리는 위치에 있는 로봇을 또 내려야 한다. 데크나 큐를 사용 할 수 없다. 컨베이어 벨트를 돌린다는것은 배열의 요소들을 한 칸씩 오른쪽으로 옮기는 행위다. 따라서 Queue나 Deque를 사용해서 poll -> 이후 바로 add와 같이 구현하려고 생각했지만, 해당 문제에서 큐나 데크를 사용하지 못하는 이유가 있다. 값을 변경해야한다. 로봇이 이동하는것을 boolean 배열처럼 구현하려고 ..
-
Spring 완전정복 6 - 데이터베이스 연동, 통합 테스트Spring(Web) 2022. 4. 22. 21:31
강의에서는, H2 데이터베이스를 이용해 멤버 데이터들을 저장하는것을 알려주었다. 실제 구현부 (JdbcMemoryRepository)를 볼 때에는, 학교에서 실습했었던 oracle db가 생각났었던.. 강의였다. 1. 실행 할 쿼리문 정의 2. getConnection 메소드를 이용해 데이터베이스와 연결 생성. 3. 커넥션에서 쿼리문을 이용해 PreaparedStatement 생성. 4. 실행 할 쿼리문에 데이터를 넘겨줌. 과 같은 형태로 데이터베이스와 통신하는 방법이다. 다만, 이와같이 데이터베이스와 통신 할 때에는 예외를 throw하는 경우가 많으므로, 항상 try catch 문과 같이 예외를 처리 할 수 있는 키워드들을 사용해 처리해줘야 한다. 마지막에 통신이 끝난 후 연결을 해제해줘야 서버에 과부..
-
1261 - 알고 스팟Baekjoon 2022. 4. 22. 21:20
아래에서 풀이했던 숨바꼭질 3와 비슷한 유형으로, 0-1 BFS 문제이다. 1. 벽을 부수는 경우 (가중치 1) 2. 벽을 부수지 않는 경우 (가중치 0) 이므로, Deque를 사용해서 벽을 부술 경우 마지막에 삽입, 벽을 부수지 않을 경우 앞에 삽입하는 형식으로 구현했다. import java.util.*; import java.io.*; class Cordc { int x; int y; Cordc(int x, int y) { this.x = x; this.y = y; } } public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputS..
-
13549 - 숨바꼭질 3Baekjoon 2022. 4. 22. 21:18
이전에 있었던 숨바꼭질 문제와 같은 문제인데, 가중치가 모든 경우마다 같은것이 아닌 0 - 1 총 두 가지의 가중치를 가진 문제이다. 같은 가중치를 가지고 있을 경우, BFS를 실행하면 최선의 답을 구할 수 있지만, 다른 가중치를 가지고 있을 경우 BFS를 돌린다고해서 최선의 답이 아닐 수 있다. (방문한 노드가 이전에 BFS를 돌렸던 노드보다 가중치가 클 수 있다.) 그래서, 보통 Queue를 2개 사용하여 현재 큐 - 다음 큐 와 같은 형식으로 구현해 문제를 풀이하게 된다. 하지만, Deque 자료구조를 이용하여 addFirst, addLast 메소드들을 이용하면 Deque 하나로 문제를 풀이 할 수 있게 된다. 가중치가 더 작은 쪽이 *2 연산을 하는 쪽이므로(0초 소요), 큐의 앞쪽에 삽입하여 먼..