전체 글 썸네일형 리스트형 백준 - 16234 인구 이동(Java) dfs 문제입니다. N*N 이차원 배열에서 네 방향으로 조건에 맞는 곳을 탐색해야 합니다. 조건 : 현재 위치와 다음 위치의 차이가 L 이상이고 R 이하여야 한다.(L과 R은 문제에 주어진다.) 문제 접근 순서는 다음과 같습니다. dfs 탐색을 하여 국경을 연다. 국경이 하나 이상 열리면 인구 재배치를 한다. 국경이 더 이상 열리지 않을 때 까지 1, 2번을 반복한다. ※ [참고사항] 저의 경우 처음에 bfs로 구현을 했지만, 메모리 초과가 발생했습니다. 혹시나 하여 bfs가 아닌 dfs로 바꾸니 정답처리가 됐습니다. bfs는 탐색 넓이, dfs는 탐색 깊이에 따라 메모리의 차이가 발생합니다. 일반적으로 dfs는 bfs보다 메모리에서 효율적이기 때문에, 메모리 초과가 발생하시는 분들은 dfs로 구현해 보.. 더보기 디자인 패턴 - 전략 패턴(Strategy Pattern) 1. 정의 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 한다. 전략패턴을 이용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다. 2. 예시 오리가 소리 내는 행동을 수정하고 싶다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client{ // 꽥 소리가 나는 행동을 사용하고 싶을 때 QuckBehavior behavior = new Quack(); behavior.quck(); // 꽥 // 삑 소리가 나는 행동을 사용하고 싶을 때 QuckBehavior behavior = new Squeak(); behavior.quck(); // 삑 // 소리를 내고 싶지 않을 때 QuckBehavior behavior = new MuteQuac.. 더보기 프로그래머스 - 우박수열 정적분(Java) 구현 문제입니다. 숫자 k와 범위 range가 주어졌을 때, 범위 내의 정적분(넓이)를 구하는 문제입니다. 숫자 k는 콜라츠 추측에 의해 y값을 구하는데 사용됩니다. y = k; // 콜라츠 추측 while(y>1){ if(y%2==0) (y = y/2); else y = ((3*y) + 1); } k=6일 때, 콜라츠 추측을 계산하면 다음 그림과 같습니다. 그림과 같이 콜라도 추측에 의해 6이 1로 되기 위해 8번의 과정을 거쳐야 합니다. 정적분(넓이)를 구하기 위해서는 각 범위의 사다리꼴 넓이를 구하면 됩니다. 사다리꼴 넓이 : ((윗변+아랫변)*높이)/2 각 구역의 넓이를 구하면 다음과 같습니다. [0,1] 범위의 넓이는 4.5입니다. [1,2] 범위의 넓이는 6.5 입니다. ... 각 구역의 넓이.. 더보기 프로그래머스 - 야간 전술보행(Java) 구현 문제입니다. 거리 n이 주어졌을 때, 화랑이가 최대로 갈 수 있는 거리를 구하는 문제입니다. 1초에 1의 거리를 걷는데, 화랑이 위치에 감시병이 일을 하는 중이라면 해당 위치가 최대입니다. 감시병이 일하는 시간인 workTime과 쉬는 시간인 restTime이 주어질 때, 특정 위치인 j에서 workTime과 restTime의 합의 나머지가 workTime보다 작으면 화랑이가 감시병에게 들키게됩니다. int status = j % (worTime + restTime); if(status>0 && status 더보기 프로그래머스 - 하노이의 탑(Java) dfs 문제입니다. 하노이의 탑은 큰 원판이 작은 원판 위로 올라갈 수 없다는 특징이 있습니다. 이러한 조건으로 1번 위치의 원판을 모두 3번 위치로 옮겨 그 과정을 반환하는 문제입니다. 하노이의 탑은 다음과 같이 일반화할 수 있습니다. 1번의 n개 중 n-1개를 2번으로 옮긴다. 1번의 가장 큰 n을 3번으로 옮긴다. 2번의 n-1개를 3번으로 옮긴다. 일반화된 조건에 재귀로 구현만 하면 끝나는 문제입니다. [구현 코드] import java.util.ArrayList; import java.util.List; class Solution { private static List ansList; public static int[][] solution(int n) { ansList = new ArrayLis.. 더보기 토비의 스프링 - 9.4 9장 정리 9.4.1 정리 스프링은 어떤 플랫폼에서도 서용될 수 있지만, 기본적으로 자바 엔터프라이즈 플랫폼(JavaEE)에 최적화 되어있음. HTTP를 통해 접근하는 웹 클라이언트와 백엔드 DB를 사용하는 애플리케이션에 적합함 스프링 개발의 생상선을 증대시키고 품질을 높이려면 SpringIDE 플러그인이나 STS 같은 적절한 플러그인 지원이 필요함 스프링은 의존 라이브러리가 방대하기 때문에 의존 관계를 관리하는데 많은 노력을 기울여야 함. Maven이나 Ivy 같은 빌드 툴을 사용해 의존 라이브러리를 관리하는 것은 바람직함 스프링 애플리케이션은 역할에 따라 3계층으로 구분되고, 다시 기술의 추상도에 따라 세분화되는 계층형 아키텍처를 사용하는 것이 좋음 아키텍처는 애플리케이션이 다루는 정보의 관점에서 데이터 중심과.. 더보기 토비의 스프링 - 9.3 애플리케이션 아키텍처 9.3.1 아키텍처와 SoC 지금까지 주로 오브젝트 레벨에서 관심, 성격, 책임의 분리를 진행했음 이 원리는 아키텍처 레벨에서도 동일하게 적용할 수 있음 데이터 액세스 로직을 담당하는 DAO들만 하나의 단위로 묶고, 비즈니스 서비스만 하나의 단위로 묶을 수 있음 💡 서비스 오브젝트들은 POJO로 만들어짐. 밑에서 나오지만, 서비스 계층과 기반 서비스 계층은 다름 성격이 다른 것은 아키텍처 레벨에서 분리하면 독자적인 개발 및 테스트가 가능해 개발과 변경이 모두 빨라질 수 있음 이렇게 책임과 성격이 다른 것을 크게 그룹으로 만들어 분리하는 아키텍처를 계층형 아키텍처(Layered Architecture) 또는 멀티 티어 아키텍처라고 함 보통 웹 기반의 엔터프라이즈 애플리케이션은 세 개의 계층을 갖는다고 해서.. 더보기 토비의 스프링 - 9.2 개발도구와 환경 9.2.1 JavaSE와 JavaEE 스프링3.0은 JavaSE 5 버전에서 추가된 새로운 언어와 문법의 특징을 최대한 활용해서 개발했기 때문에, JDK 5.0 이상을 필요로 함 일부 기능은 JDK 6.0 API를 이용했기 때문에 필요하다면 JDK 6.0을 써야 함 스프링 3.0이 사용될 자바 엔터프라이즈 플랫폼으로는 J2EE 1.4 버전이나 JavaEE 5.0이 필요함 스프링 3.0 자체는 JDK 6.0과 JavaEE 5.0을 기준으로 개발됐지만, 주요기능은 JDK 5.0에서 동작하는 J2EE 1.4 버전과 호환되게 제작됨 다만, J2EE 1.4 버전 서버를 사용할 때는 JDK 5.0에서 동작하는지 반드시 확인해야 됨 만약 WAS 자체가 JDK 5.0에서는 사용할 수 없다면 스프링 3.0의 이용은 불가.. 더보기 이전 1 ··· 19 20 21 22 23 24 25 ··· 48 다음