https://www.acmicpc.net/problem/1244 1244번: 스위치 켜고 끄기 첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩 www.acmicpc.net 문제 접근 과정 스위치 값을 받고, 스위치 배열에 값을 받았습니다. 남학생(1)은 자신이 받은 수가 스위치 번호의 배수일 때 스위치 값을 전환시키고 여학생(2)은 자신이 받은 수 기준으로 좌우가 대칭이여야 스위치 값을 전환시킵니다. 남학생의 경우 (배열의 인덱스+1)%수 == 0 을 통해 배수를 구하여 쉽게 구할 수 있었고, 여학생의 경우 받은 수를 기준으로 lt(수-1)와 rt(수+1)를 ..
웹 애플리케이션과 싱글톤 웹 애플리케이션은 보통 여러 고객이 동시 요청을 요구함 -> 요청마다 객체를 생성해야 함 -> 좋지 않은 방법.. 해결 방안? - 해당 객체를 1개만 생성하고, 생성된 객체를 공유하도록 설계한다. ==> 싱글톤 패턴 싱글톤 패턴( Singleton Pattern ) 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴 어떻게 보장? - private 생성자를 사용해 외부에서 임의로 new 키워드 사용하지 못하게 하여 보장 위의 코드는 객체를 미리 생성해두는 단순하고 안전한 방법, 다른 여러 싱글톤 패턴도 존재한다. 장점만 존재하는가? 문제점은? 싱글톤 패턴을 구현하기 위한 코드가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. - DIP위반 클라이언트가 ..
https://www.acmicpc.net/problem/4396 4396번: 지뢰 찾기 지뢰찾기는 n × n 격자 위에서 이루어진다. m개의 지뢰가 각각 서로 다른 격자 위에 숨겨져 있다. 플레이어는 격자판의 어느 지점을 건드리기를 계속한다. 지뢰가 있는 지점을 건드리면 플레이어 www.acmicpc.net 문제 접근 과정 먼저 지뢰의 정보가 담긴 배열과 열린 칸이 포함된 배열을 생성해주고, 열린 칸(x)이 포함된 배열의 for문을 돌며 1. 만약 x 위치에 지뢰가 있다 -> 그 즉시 모든 칸을 *로 출력한다. 2. 만약 x 위치에 지뢰가 없다 -> x에 인접한 8칸의 지뢰 수를 확인한다. 로 생각했었습니다. 하지만, 문제를 조금 더 자세히 읽었어야 했죠.. 만약 지뢰가 발견되면, 지뢰가 있는 모든 칸..
스프링 컨테이너의 생성 과정 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 함, 이는 인터페이스다. 스프링 빈 등록 스프링 빈 저장소에 @Bean이 붙은 메서드를 이름으로, 객체를 빈 객체로 저장해준다. 빈 이름을 직접 부여 가능하며 -> @Bean( name = " ~ " ) 빈 이름은 항상 다른 이름을 부여해야 한다. 이후에 스프링 빈 의존관계 설정을 준비하고 주입해준다. +) 빈을 알고싶다. 모든 빈 출력하기 applicationContext.getBeanDefinitionNames() -> 스프링에 등록된 모든 빈..
https://www.acmicpc.net/problem/2578 2578번: 빙고 첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 www.acmicpc.net 문제 접근 방법 처음 문제를 보고 단순히 "for문 여러번 돌려야겠는데?" 라고 생각했습니다. 이 생각을 하고 다른 간결한 풀이가 있는지 생각해봤지만 떠오르는 것이 없었고, 자신의 빙고판과 사회자가 부를 숫자를 배열에 입력받은 후 for문을 돌려 수를 확인하고, 수를 확인한 후에 빙고가 있는지 확인하는 과정을 구현하였습니다. 코드 import java.io.*; import java.util.*; class M..
관심사의 분리 애플리케이션을 하나의 공연이라고 생각하자. 1. 각각의 인터페이스를 배우 역할(로미오, 줄리엣 ... )이라고 설정 2. 배우는 배역에만 집중해야만 한다. 3. 배우를 섭외하고, 역할에 맞는 배우를 지정하는 것은 별도의 공연 기획자가 있어야 하는 것이다. 인터페이스(배역), 구현체(배우), 그리고 이를 담당하는 AppConfig(공연 기획자) AppConfig 이를 통해 구현체에 의존하지 않고, 인터페이스에만 의존할 수 있게 된다. IoC( Inversion of Control ) 제어의 역전, 제어권이 뒤바뀐 것을 의미한다. 기존에는 클라이언트 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 반면, AppConfig를 사용하면서 구현 객체는 자신의 로직을 실행하기만 하고 프로그램의 ..
해결방법 문제를 보고 모든 경우의 수를 확인해야 겠다는 생각을 했습니다. d(n) = n + n의 각 자리수의 합을 구하는 함수 여기서 n을 d(n)의 생성자라고 하는데, 이 생성자가 없는 수를 셀프 넘버라 하고, 이를 구하는 문제입니다. 1부터 10000까지 루프를 돌면서 d(n)함수가 진행되는 숫자들을 기록하고, 이에 해당하지 않는 수를 루프를 돌며 출력하여 해결하였습니다. 코드 package baekjoon; public class J4673 { static int[] arr = new int[10001]; static void d(int n) { int sum = 0; for(int i=0; i
스프링의 탄생 기존의 자바 표준 기술인 EJB(Enterprise Java Beans) -> 이론적으로 좋았지만 어렵고 느렸던... Rod Johnson이 책을 출간한 후 오픈소스 프로젝트를 진행하게 된다. EJB라는 겨울을 넘어 새로운 시작이라는 뜻로 spring, 봄이라 지었다. 스프링 스프링 프레임워크 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트 웹 기술 : 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 .... 스프링 부트 - 스프링을 편리하게 사용할 수 있도록 지원, 최근은 Default Tomcat 같은 웹 서버를 내장하여 별도의 웹 서버가 필요하지 않기에 단독으로 스프링 애플리케이션 생성 가능 starter 종속성 제공 (..