디버그 로그가 안뜬 상황 AppConfig 관련해서 ComponeteScan 실습을 하는 도중에 아래와 같은 디버그 로그가 출력이 안되는 경우가 생겼다. 사용하는 스프링 버전은 3.2이고 이거 관련해서 찾아보니 로그레벨이 INFO로 설정되어서 그렇다고한다. 따라서 스프링 3.1은 기존과 같이 디버그 로그를 보고싶으면 로그레벨을 INFO -> DEBUG로 변경해줘야한다 로그 레벨 종류 변경에 앞서 log4j가 뭔지, 로그레벨을 왜 변경해줘야하는건지 그리고 종류에는 무엇이 있는지 설명하겠다 log4j Java 환경의 로깅 시스템을 제공하는 라이브러리이다. 로깅이란 로그 기록이란 뜻으로 사용자의 패턴이나 시스템 동작 분석에 사용되거나 해킹 사고가 발생할 경우 비정상 동작의 기록을 통해 추적하는데 사용된다. 또..
문제 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인지 알아보자. 물론 중간에 다른 도시를 경유해서 여행을 할 수도 있다. 예를 들어 도시가 5개 있고, A-B, B-C, A-D, B-D, E-A의 길이 있고, 동혁이의 여행 계획이 E C B C D 라면 E-A-B-C-B-C-B-D라는 여행경로를 통해 목적을 달성할 수 있다. 도시들의 개수와 도시들 간의 연결 여부가 주어져 있고, 동혁이의 여행 계획에 속한 도시들이 순서대로 주어졌을 때 가능한지 여부를 판별하는 프로그램을 작성하시오. 같은 도시를 여러 번 방문하는 것도 가능하다. 입력 첫 줄에 도시의 수 N이..
문제 1부터 N까지의 수를 오름차순으로 쓴 수열 1 2 3 ... N을 생각하자. 그리고 '+'나 '-', 또는 ' '(공백)을 숫자 사이에 삽입하자(+는 더하기, -는 빼기, 공백은 숫자를 이어 붙이는 것을 뜻한다). 이렇게 만든 수식의 값을 계산하고 그 결과가 0이 될 수 있는지를 살피자. N이 주어졌을 때 수식의 결과가 0이 되는 모든 수식을 찾는 프로그램을 작성하라. 입력 첫 번째 줄에 테스트 케이스의 개수가 주어진다( 0이면 문자열 append static void calculateStr(String str) { String tempStr = "1"; char tempChar = '+'; int sum = 0; for (int i = 2; i < n * 2; i += 2) { if (str.ch..
문제 상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다. 매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에는 불이 붙지 않는다. 상근이는 동서남북 인접한 칸으로 이동할 수 있으며, 1초가 걸린다. 상근이는 벽을 통과할 수 없고, 불이 옮겨진 칸 또는 이제 불이 붙으려는 칸으로 이동할 수 없다. 상근이가 있는 칸에 불이 옮겨옴과 동시에 다른 칸으로 이동할 수 있다. 빌딩의 지도가 주어졌을 때, 얼마나 빨리 빌딩을 탈출할 수 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스는 최대 100개이다. 각 테스트 케이스의 첫째 줄에는 빌딩 지도의 너비와 높이 w와 h가 주어진다..
문제 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제일 친한 친구인 비버의 굴로 가능한 빨리 도망가 홍수를 피하려고 한다. 티떱숲의 지도는 R행 C열로 이루어져 있다. 비어있는 곳은 '.'로 표시되어 있고, 물이 차있는 지역은 '*', 돌은 'X'로 표시되어 있다. 비버의 굴은 'D'로, 고슴도치의 위치는 'S'로 나타내어져 있다. 매 분마다 고슴도치는 현재 있는 칸과 인접한 네 칸 중 하나로 이동할 수 있다. (위, 아래, 오른쪽, 왼쪽) 물도 매 분마다 비어있는 칸으로 확장한다. 물이 있는 칸과 인접해있는 비어있는 칸(적어도 한 변을 공유)은 물이 차게 된다. 물..
들어가기에 앞서 책 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'을 참고하여 작성하였다 기본적으로 인텔리제이 프레임워크를 이용했고 자바 8과 gradle 4.5를 기반으로 진행했다. 윈도우를 사용할 경우 문제 없겠지만 저와같이 m1또는 m2기반의 맥북을 사용하고 계시다면 아래 URL참고해주시면 됩니다! 중간에 .zshrc변경사항 적용에서 오타 존재(source ~./zshrc -> source~/.zshrc) 자바 버전별로 설치 및 관리 gradle 관련된 부분은 책에서는 4.1을 사용했지만 현재 스프링 프레임 워크가 진행될 수 있는 최소 gradle 버전 조건이 4.4이상이라 그 이상을 사용해주시면 됩니다. 추후에 더 높은 버전을 요구 할 수도 있는데 그에 맞춰 gradle 버전을 올려주면 됩니다..
문제 IPv6은 길이가 128비트인 차세대 인터넷 프로토콜이다. IPv6의 주소는 32자리의 16진수를 4자리씩 끊어 나타낸다. 이때, 각 그룹은 콜론 (:)으로 구분해서 나타낸다. 예를 들면, 다음과 같다. 2001:0db8:85a3:0000:0000:8a2e:0370:7334 32자리의 16진수는 사람이 읽고 쓰기에 불편하고, 대부분의 자리가 0이기 때문에 아래와 같이 축약할 수 있다. 각 그룹의 앞자리의 0의 전체 또는 일부를 생략 할 수 있다. 위의 IPv6을 축약하면, 다음과 같다 2001:db8:85a3:0:00:8a2e:370:7334 만약 0으로만 이루어져 있는 그룹이 있을 경우 그 중 한 개 이상 연속된 그룹을 하나 골라 콜론 2개(::)로 바꿀 수 있다. 2001:db8:85a3::8a..
문제 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다. 입력 첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다. 출력 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. 풀이 아래 그림을 참고하면 이해가 쉽다. 그림은 현재 0부터 6까지의 정수 4개르 더해서 그합이 6이 되어야한다. 그것을 표로 표현하면 아래처럼된다. 규칙을 보면 주황칸2개가 빨강칸의 값이 되는것을 알 수 있고 이를 통해서dp식을 짜게되면 map[i][j] = map[i-1][j]+map[i][j-1] 이런식이 ..
추상 팩토리 패턴 정의 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이들 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴이다. 이전에 팩토리 메서드 패턴을 좀 더 캡슐화한 방식이라고 보면 될 것 같다. 팩토리 메서드와 다른점 팩토리 메서드: 객체 생성을 위임한다 추상 팩토리: 서로 관련이 있는 객체들을 묶어서 새로운 팩토리 클래스를 만든다. 장점 구체적인 제품과 클라이언트 코드 간의 긴밀한 결합을 피한다. 단일 책임 원칙: 제품 생성 코드를 한 곳으로 추출하여 코드를 더 쉽게 지원할 수 있다. 기존 클라이언트 코드를 손상시키지 않고 제품의 새로운 변형을 도입 할 수 있다. 단점 새로운 인터페이스와 클래스가 패턴과 함께 도입되기 때문에 코드가 생각보다 복잡해질 수 있다. 패..
팩토리 메서드 패턴 정의 객체 생성과 관련된 디자인 패턴으로 객체 생성 역할을 담당하면서 각 클라이언트에서 구현 클래스에 직접 의존하지 않도록 분리하는 패턴이다. 물론 새로운 클래스가 추가 되었을때 Facotory클래스를 수정해야하긴 한다. 한마디로, 인스턴스를 생성을 서브 클래스로 책임을 넘겨준다. 장점 확장에 열려있고 변경에 닫혀있게 된다. 중복된 코드가 줄어들고 상속하는 모든 클래스가 동일한 공통 로직을 사용할 수 있다. 객체가 변화할 여지가 있을때 상속하는 클래스를 하나 더 만들어서 구현해주면 된다. 단점 많은 클래스 파일이 생긴다. 패턴 적용전 이미지 표현 코드 간략하게 PizzaStore코드만 보여주겠다 PizzaStore.java public class PizzaStore { Pizza or..