Uknow's Lab.
article thumbnail
[디자인 패턴] Adaptor(어댑터) 패턴
CS 지식/디자인 패턴 2024. 5. 8. 00:47

어댑터 일본 여행을 갈 때 필요한 준비물 중 하나는 전기 어댑터(Adapter/Adaptor)입니다.한국은 220V를 쓰지만 일본은 110V를 쓰기 때문에, 플러그 모양이 서로 다릅니다.때문에 220V를 110V으로 바꿔주는 어댑터가 필요합니다. 객체지향 프로그래밍과 디자인 패턴에서 사용되는 어댑터 패턴 역시 이와 비슷합니다.기존의 클래스 인터페이스를 새로운 인터페이스에 맞추고자 사용하죠.서로 호환되지 않는 두 클래스를 연결할 때 사용합니다.  업체에서 제공한 클래스를 사용해야 할 때, 이 클래스의 인터페이스가 기존에 사용하던 인터페이스와 꽤나 다릅니다.    기존 코드를 바꾸기 어려울 때,기존의 사용하던 코드를 새 업체의 코드에 맞게 적응시켜주는 클래스를 만듬으로써,서로 호환되는 형태의 요청으로 만들어..

article thumbnail
자바로 몬티 홀 문제 실험해보기
일상 2024. 4. 28. 20:16

몬티 홀 문제https://ko.wikipedia.org/wiki/%EB%AA%AC%ED%8B%B0_%ED%99%80_%EB%AC%B8%EC%A0%9C 몬티 홀 문제 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 세 개의 문 중에서 1번 문 뒤에 차가 있을 것이라 선택했을 때, 진행자는 3번 문 뒤에는 염소가 있음을 보여주면서 1번 문 대신에 2번문을 선택하겠냐고 물었다.ko.wikipedia.org 몬티 홀 문제(Monty Hall problem)은 미국의 TV쇼 거래를 합시다(Let's Make a Deal)에서 유래된 문제입니다.  3개의 문이 있습니다.이 중 하나의 문 뒤에는 자동차가, 나머지 두 개의 문에는 염소가 있습니다.자동차가 있는 문을 선택한다면 자동차를 받습니다. ..

article thumbnail
[백준 16954번] 움직이는 미로 탈출
코딩테스트/Kotlin 2024. 4. 7. 14:52

https://www.acmicpc.net/problem/16954 16954번: 움직이는 미로 탈출 욱제는 학교 숙제로 크기가 8×8인 체스판에서 탈출하는 게임을 만들었다. 체스판의 모든 칸은 빈 칸 또는 벽 중 하나이다. 욱제의 캐릭터는 가장 왼쪽 아랫 칸에 있고, 이 캐릭터는 가장 오른쪽 www.acmicpc.net 난이도 : 골드 3 태그 : 그래프 이론, 그래프 탐색, 너비 우선 탐색 설명 BFS를 사용한 4방향 델타 탐색 문제입니다 일반 문제와 다른 부분은, 미로가 1초마다 내려온다는 점이죠. 때문에 한 회차마다 이동을 하며 이동이 모두 끝난 뒤 모든 칸을 1만큼 내리는 과정을 반복합니다. 상하좌우 + 대각선 8방향 탐색 + 제자리 val dx = intArrayOf(-1, -1, -1, 0,..

article thumbnail
[백준 6087번] [Kotlin] 레이저 통신
코딩테스트/Kotlin 2024. 4. 5. 13:56

https://www.acmicpc.net/problem/6087 6087번: 레이저 통신 크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서 www.acmicpc.net 난이도 : 골드 3 태그 : 그래프 이론, 그래프 탐색, 너비 우선 탐색, 데이크스트라, 최단 경로 설명 레이저를 쐈을 때, 방향을 좌측 혹은 우측으로 90도 회전할 수 있는 거울을 최소로 놓아 레이저를 목표 지점까지 도달시키는 문제입니다. 저는 BFS를 응용하여 풀이했는데요. 한 거울마다 90도씩 회전할 수 있기 때문에 현재 레이저의 방향 역시 좌표에 저장해야 합니다. 따라서 저는 n ..

article thumbnail
[Spring] Filter가 두 번씩 실행되던 현상
프레임워크/Spring 2024. 3. 19. 21:13

Filter가 두 번씩 호출되는 현상 발생...! Jwt 로그인 흐름을 파악하기 위해 로그를 찍어 확인하던 중, JwtAuthenticationFilter가 두 번씩 실행되던 현상을 발견하였습니다. 아직까지 이로 인해 일어난 문제는 없지만, 두 번씩 호출되는 건 절대 바람직한 현상이 아니기에 원인 추적에 나섰습니다. @Slf4j @Order(Ordered.HIGHEST_PRECEDENCE) @RequiredArgsConstructor @Component public class JwtAuthenticationFilter extends GenericFilterBean { private final JwtTokenProvider jwtTokenProvider; @Override public void doFilt..

article thumbnail
[백준 16973번] [Kotlin] 직사각형 탈출
코딩테스트/Kotlin 2024. 3. 19. 13:42

https://www.acmicpc.net/problem/16973 16973번: 직사각형 탈출 크기가 N×M인 격자판에 크기가 H×W인 직사각형이 놓여 있다. 격자판은 크기가 1×1인 칸으로 나누어져 있다. 격자판의 가장 왼쪽 위 칸은 (1, 1), 가장 오른쪽 아래 칸은 (N, M)이다. 직사각형의 가장 www.acmicpc.net 난이도 : 골드 4 태그 : 그래프 이론, 그래프 탐색, 너비 우선 탐색, 누적 합 설명 직사각형이 장애물에 걸리지 않게 시작점에서 도착점으로 갈 수 있는지 판단하는 문제입니다. 처음에는 BFS를 돌리며 각 좌표마다 직사각형의 넓이만큼 맵을 확인하는 방법으로 풀었으나, 시간초과를 맞이했습니다 어떻게 할까 고민을 하다가, 맵에 미리 장애물의 크기를 매핑해놓자고 생각했습니다...

article thumbnail
[디자인 패턴] Singleton(싱글톤) 패턴
CS 지식/디자인 패턴 2024. 3. 16. 01:21

인스턴스가 단 하나밖에 없는 객체 책임을 분리하고 유연성을 키우기 위해 클래스를 나누었지만 Config, 로그 기록용 클래스 등 인스턴스가 단 하나만 있어도 작동하는 경우는 꽤나 있습니다. 이 경우, 인스턴스를 2개 이상 생성할 경우 괜히 자원만 더 잡아먹을 뿐이죠. 싱글톤 패턴 구현 : private 생성자, getInstance, static 3총사 public class MySingleton { private static MySingleton instance = null; // 생성자를 private로 두어 기본 생성자를 못쓰게 함 private MySingleton() { } public static MySingleton getInstance() { if (instance == null) { in..

article thumbnail
[백준 2234번] [Kotlin] 성곽
코딩테스트/Kotlin 2024. 3. 15. 00:18

https://www.acmicpc.net/problem/2234 2234번: 성곽 첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 N개의 정수로 벽에 대한 정보가 주어진다. 벽에 대한 정보는 한 정수로 주어지는데, 서쪽에 벽이 있을 때는 1을, 북쪽에 벽이 있을 때는 2를, www.acmicpc.net 난이도 : 골드 3 태그 : 그래프 이론, 그래프 탐색, 너비 우선 탐색, 비트마스킹 접근법 DFS / BFS를 이용한 그룹화 문제입니다. 특이한 점은 0 ~ 15 범위 내 숫자가 주어져 벽의 위치를 알려준다는 점인데요. 서쪽에 벽이 있을 때는 1을, 북쪽에 벽이 있을 때는 2를, 동쪽에 벽이 있을 때는 4를, 남쪽에 벽이 있을 때는 8을 더한 값이 주어집니다. 예를 들어 (0, 0)의 경우..

article thumbnail
[디자인 패턴] Factory(팩토리) 패턴
CS 지식/디자인 패턴 2024. 3. 10. 01:35

new 키워드 Pizza pizza = new CheesePizza(); new라는 키워드는 자바의 키워드 중 하나로, 객체를 생성한다는 점에서 한 번도 사용하지 않고 코딩하기는 사실상 불가능합니다. Pizza pizza; if(type == "cheese") { pizza = new CheesePizza(); } else if(type == "veggie") { pizza = new VeggiePizza(); } else if (type == "pepperoni") { pizza = new PepperoniPizza(); } pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); 일련의 구상 클래스가 있을 때, 위와 같은 형태가 나타나게 됩니다. 인터페이스..

article thumbnail
[백준 13565번] [Kotlin] 침투
코딩테스트/Kotlin 2024. 3. 6. 14:21

https://www.acmicpc.net/problem/13565 13565번: 침투 첫째 줄에는 격자의 크기를 나타내는 M (2 ≤ M ≤ 1,000) 과 N (2 ≤ N ≤ 1,000) 이 주어진다. M줄에 걸쳐서, N개의 0 또는 1 이 공백 없이 주어진다. 0은 전류가 잘 통하는 흰색, 1은 전류가 통하지 않 www.acmicpc.net 난이도 : 실버 2 태그 : 그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색 설명 맨 위에서 맨 아래까지 도달할 수 있는지 판단하는 문제입니다. dfs / bfs를 응용하여 풀 수 있는데요. 맨 위의 모든 점에서 dfs / bfs를 시작하여 최하층에 도달할 수 있다면 성공입니다. 좌측부터 1번째 통로를 탐색한 결과, 벽에 막혀 가지 못합니다. 2번..