good_da22 's devLog

분류 전체보기 108

IoC & Container

Ioc & Container IoC (Inversion of Control, 제어의 역행) 객체지향 언어에서 Object간의 연결 관계를 런타임에 결정 객체 간의 관계가 느슨하게 연결됨(loose coupling) IoC의 구현 방법 중 하나가 DI(Dependency Injection) IoC 유형 Dependency Lookup 컨테이너가 lookup context를 통해서 필요한 Resource나 Object를 얻는 방식 JNDI Lookup JNDI 이외의 방법을 사용한다면 JNDI 관련 코드를 오브젝트 내에서 일일이 변경해주어야 한다. Lookup 한 Object를 필요한 타입으로 Casting 필요 Naming Exception을 처리하기 위한 로직 필요 Dependency Injection ..

Spring Framework

Spring Framwork Spring Framwork 등장 배경 기존 EJB(Enterprise JavaBean) 을 사용하여 애플리케이션 작성을 쉽게 할 수 있다. Low Level의 트랜잭션이나 상태관리, 멀티 쓰레딩, 리소스 풀링과 같은 복잡한 Low Level의 API를 이해하지 못해도 애플리케이션 개발 가능 하지만 현실에서 반영이 어려움 코드 수정 후 반영하는 과정 자체가 번거롭다. 기능은 좋지만 복잡한 스펙으로 인한 개발 효율성 감소 애플리케이션 테스트를 위해선 반드시 EJB 서버가 필요 웹 사이트가 점점 커지면서 엔터프라이즈급의 서비스가 필요 세션빈에서 Transaction 관리 용이 로긴, 분산처리, 보안 등 자바 진영에서는 EJB가 엔터프라이즈급 서비스로 각광 EJB 스펙에 정의된 인..

백준 14502번 연구소 (JAVA)

백준 14502번 연구소 (JAVA) 문제 난이도 골드 4 알고리즘 분류 구현 그래프 탐색 브루트포스 알고리즘 너비 우선 탐색 풀이 주어진 빈 공간(상태가 0 인 공간) 중 3곳을 선택해서 벽을 설치한다. 벽을 설치한 후 바이러스를 인접한 상하좌우 공간으로 확산한다. 확산이 끝난 후 남은 빈 공간을 계산 코드 import java.io.*; import java.util.*; public class Main { static int[] dx = { -1, 1, 0, 0 }; static int[] dy = { 0, 0, -1, 1 }; static int N, M, answer; static int[][] map, test; static List space, virus; static boolean[][] ..

백준 14500번 테트로미노 (JAVA)

백준 14500번 테트로미노 (JAVA) 문제 난이도 골드 4 알고리즘 분류 구현 브루트포스 알고리즘 풀이 테트로미노의 크기는 4 각 위치에서 4방 탐색으로 갈 수 있는 모든 위치를 4번 탐색하는 것은 모든 테트로미노의 경우의 수(대칭, 회전)을 탐색하는 것과 같다. ㅗ, ㅏ, ㅜ, ㅓ 모양의 경우 한 방향으로 이어지지 않는다. 따라서 2번 때 탐색 시점에서 뻗어가는 경우를 계산한다. 코드 import java.io.*; import java.util.*; public class Main { static int N, M, answer; static int[][] arr; static boolean[][] visited; static int[] dx = { -1, 1, 0, 0 }; static int[]..

백준 2239번 스도쿠 (JAVA)

백준 2239번 스도쿠 (JAVA) 문제 난이도 골드 4 알고리즘 분류 구현 백트래킹 풀이 0인 경우, 숫자 1 ~ 9까지 대입 1 ~ 9 까지의 숫자중 스도쿠의 조건을 만족하는 경우(3*3, 행, 열) 해당 위치에 숫자를 대입하고 다음 단계 탐색(방문) 방문 여부를 초기화(0으로) 한 후 대입 가능한 숫자를 계속 탐색 81자리 까지 끝까지 탐색한 경우, 최초의 정답을 반환해야한다.(사전순) 처음 탐색 종료 조건(81자리 모두 탐색)을 만족하면 각 단계를 탐색하기 전에 최최 탐색 완료 여부를 확인 코드 import java.io.*; public class Main { static int arr[][]; static boolean check; public static void main(String[] a..

SWEA 4008번 [모의 SW 역량테스트] 숫자 만들기 (JAVA

SWEA 4008번 [모의 SW 역량테스트] 숫자 만들기 (JAVA) 문제 풀이 각 연산자의 개수 만큼 빈 공간을 선택, 선택된 빈 공간에 연산자 대입 다음 연산자에서 앞 선 작업을 반복 동일한 연산자가 들어갈 위치를 선택하면 순서는 상관 없다. 이미 연산자가 위치한 경우 다음 연산자는 들어갈 수 없다. 코드 import java.io.*; import java.util.*; public class Solution { static char[] operator = { '+', '-', '*', '/' }; static int[] count = { 0, 0, 0, 0 }; static int[] numbers; static char[] selected..

SWEA 5656번 [모의 SW 역량테스트] 벽돌 깨기 (JAVA)

SWEA 5656번 [모의 SW 역량테스트] 벽돌 깨기 (JAVA) 문제 풀이 구슬을 놓을 위치 결정, 중복 순열 구슬은 단위 연산에서 전후 선택과 상관없이 어느 위치에도 놓아질 수 있다. 선택된 구슬 위치에서 처음으로 만나는 벽돌 선택 처음으로 만나는 벽돌에서부터 주어진 조건에 따라 4방 탐색으로 벽돌 제거 단위 연산에서 제거 가능한 모든 벽돌을 제거한 후 빈 공간이 있을 경우 벽돌은 밑으로 떨어진다. 코드 import java.io.*; import java.util.*; public class Solution { static int[] dx = { -1, 1, 0, 0 }; static int[] dy = { 0, 0, -1, 1 }; static int N, W, H; static int[][] ..

백준 17471번 게리맨더링 (JAVA)

백준 17471번 게리맨더링 (JAVA) 문제 난이도 골드 4 알고리즘 분류 브루트포스 알고리즘 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 조합론 풀이 N개의 구역 중, 1 ~ N / 2 개의 구역을 선택 N / 2 ~ N -1 개의 구역은 앞서 선택된 구역에서 선택되지 않는 경우로 따로 계산할 필요가 없다. 분리한 구역 내에서 각 그룹이 서로 연결되어 있는지 확인, 너비 우선 탐색 두 그룹 모두 각각 연결되어 있다면, 각 그룹의 인구 수를 계산 코드 import java.io.*; import java.util.*; public class Main { static int N, answer; static List adj; static int[] size; static int[] numbers; publ..

백준 16234번 인구 이동 (JAVA)

백준 16234번 인구 이동 (JAVA) 문제 난이도 골드 5 알고리즘 분류 구현 그래프 이론 그래프 탐색 너비 우선 탐색 시뮬레이션 풀이 너비 우선 탐색을 통해 전체 데이터내에서 연합의 여부를 확인 연합이 발생하는 경우, 다음 단계로 이동 연합이 발생하지 않는 경우, 종료 각 단계 내에서 너비 우선 탐색을 진행, 각 연합 내에서 새로운 인구 수 계산 단계가 끝나고 방문여부 초기화 코드 import java.io.*; import java.util.*; public class Main { static int N, L, R; static int[][] map; static int[] dx = { -1, 0, 1, 0 }; // 상, 우, 하, 좌 static int[] dy = { 0, 1, 0, -1 }..

위상 정렬 (Topology Sort)

위상 정렬 (Topology Sort) 유향 그래프의 정점들을 방향을 거스르지 않도록 나열하는 것을 의미 위상 정렬은 순서가 정해져 있는 작업들을 차례대로 수행해야 할 때, 그 순서를 결정해주는 알고리즘 ex) 교육과정의 선수과목 구조 만약 특정 수강 과목에 선수 과목이 있다면 그 선수 과복부터 수강해야하므로, 특정 과목들을 수강해야 할 때 위상 정렬을 통해 올바른 수강 순서를 찾아낼 수 있다. 선후 관계가 정의된 그래프 구조 상에서 선후 관계에 따라 정렬하기 위해 위상 정렬 이용 가능 정렬 순서는 유향 그래프의 구조에 따라 여러 개의 종류가 나올 수 있다. 위상 정렬이 성립하기 위해서는 반드시 그래프의 순환이 존재하니 않아야 한다. 그래프가 비순환 유향 그래프(directed acyclic graph)..