전체 글 779

[ BOJ ][JAVA][2559] 수열

https://www.acmicpc.net/problem/2559 2559번: 수열 첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 www.acmicpc.net 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 128 MB 8423 2905 2382 34.517% 문제 매일 아침 9시에 학교에서 측정한 온도가 어떤 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 알아보고자 한다. 예를 들어, 아래와 같이 10일 간의 온도가 주어졌을 때, 3 -2 -4 -9 0 3 7 13 8 -3 모든 연속적인 이틀간..

[ BOJ ][JAVA][1253] 좋다

https://www.acmicpc.net/problem/1253 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 256 MB 4088 961 655 22.416% 문제 N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다. N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라. 수의 위치가 다르면 값이 같아도 다른 수이다. 입력 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째..

[ BOJ ][JAVA][13144] List of Unique Numbers

https://www.acmicpc.net/problem/13144 13144번: List of Unique Numbers 길이가 N인 수열이 주어질 때, 수열에서 연속한 1개 이상의 수를 뽑았을 때 같은 수가 여러 번 등장하지 않는 경우의 수를 구하는 프로그램을 작성하여라. www.acmicpc.net 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 32 MB 811 318 239 41.493% 문제 길이가 N인 수열이 주어질 때, 수열에서 연속한 1개 이상의 수를 뽑았을 때 같은 수가 여러 번 등장하지 않는 경우의 수를 구하는 프로그램을 작성하여라. 입력 첫 번째 줄에는 수열의 길이 N이 주어진다. (1 ≤ N ≤ 100,000) 두 번째 줄에는 수열을 나타내는 N개의 정수가 주어진다...

[ BOJ ][JAVA][11066] 파일 합치기

https://www.acmicpc.net/problem/11066 11066번: 파일 합치기 소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본 www.acmicpc.net 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 256 MB 16311 8535 5539 51.126% 문제 소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본이 들어있는 한 개의 파일을 만든다. 이 과정에서 두 개의 파일을 합쳐..

[ BOJ ][JAVA][3055] 탈출

https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 128 MB 30812 10093 6901 31.161% 문제 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제일 친한 친구인 비버의 굴로 가능한 빨리 도망가 홍수를 피하려고 한다. 티떱숲의 지도는 R행 C열로 ..

[ Spring ] 13. Spring의 JDBC

JDBC JDBC는 자바에서 DB를 활용할 수 있도록 지원하는 API이다. 데이터 베이스 테이블과, 자바 객체 사이의 단순한 매핑을 간단한 설정을 통해 처리한다. 기존의 JDBC에서는 구현하고 싶은 로직마다 필요한 SQL문이 모두 달랐고, 이에 필요한 Connection, PrepareStatement, ResultSet 등을 생성하고 Exception 처리도 모두 해야 하는 번거로움이 존재했다. 때문에 Spring에서는 JDBC와 ORM 프레임워크를 직접 지원하기 때문에 따로 작성하지 않아도 모두 다 처리해주는 장점이 있다. (Spring-JDBC) 여기서는 Spring JDBC에 대해서 알아본다. DataSource란? DataSource는 JDBC 명세의 일부분이면서 일반화된 연결 팩토리이다. 즉,..

[ Spring ] 12. DAO & DTO & Entity와 스프링 패키지의 전체 구조

DAO & DTO & Entity DAO Data Access Object repository package 실제로 DB에 접근하는 객체 Persistance Layer(DB에 dat를 CRUD하는 계층)이다. Service와 DB를 연결하는 고리의 역할 SQL을 사용해 (개발자가 직접 코딩) DB에 접근한 후 적절한 CRUD API를 제공한다. JPA 대부분의 기본적인 CRUD method를 제공하고 있다. extends JpaRepository public interface QuestionRepository extends CrudRepository { } "Object" 단위 -> (SQL을 이용한 CURD) -> DB의 "Record" 단위로 저장 되는 순서 Obejct와 Record 간의 miss..

[ Spring ] 11. Spring에서의 Annotation

Annotation 소스코드에 @어노테이션의 형태로 표현하며, 클래스, 필드, 메소드의 선언부에 적용할 수 있는 특정기능이 부여된 표현법 애플리케이션의 규모가 커질수록, xml환결설정이 매우 복잡해지는데 , 이를 개선하기 위해 자바 파일에 어노테이션을 적용해서 개발자가 설정 파일 작업을 할때 발생시키는 오류를 최소화해주는 역할을 한다. 어노테이션의 사용으로 소스 코드에 메타데이터를 보관할 수 있고, 컴파일 타임의 체크 뿐 아니라 어노테이션 API를 사용해 코드 가독성도 높여줄 수 있다. @Controller : Dispatcher-Servlet.xml에서 bean 태그로 정의하는 것과 같은 역할 @RequestMapping : 특정 메소드에서 요청되는 URL과 매칭시키는 어노테이션 @Autowired :..

[ Spring ] 10. AOP(Aspect Oriented Programming)

AOP Aspect Oriented Programming (측면/양상 지향적 프로그래밍) " 공통의 관심사항을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소 " 즉, 여러군데서 사용되는 중복되는 코드를 떼어내서 분리하고 각 메소드는 자신이 해야할 작업만 갖고 있자는 개념이다. 여기서 여러군데서 사용되는 중복되는 코드(부가 기능)가 AOP에서 말하는 Aspect이다. 각 클래스에서 공통 관심 사항을 구현한 모듈에 대한 의존관계를 갖기 보단, Aspect를 이용해 핵심 로직을 구현한 각 클래스에 공통 기능을 적용한다. 간단한 설정만으로도 공통 기능을 여러 클래스에 적용할 수 있는 장점이 있으며 핵심 로직 코드를 수정하지 않고도 웹 애플리케이션의 보안, 로깅, 트랜잭션과 같은 공통 관심사항을 AOP..

[ Spring ] 09. DI (의존성 주입)

DI 의존관계 주입 스프링 컨테이너가 지원하는 핵심 개념중 하나로, 설정파일을 통해 객체간의 의존관계를 설정 이는, 스프링에서만 사용되는 용어가 아니라 객체지향 프로그래밍에서 통용되는 개념이다. 강한 결합 객체 내부에서 다른 객체를 생성하는 것은 강한 결합도를 가지는 구조이다. A클래스 내부에서 B라는 객체를 직접 생성하고 있다면, B객체를 C객체로 바꾸고 싶은 경우, A클래스도 수정해야 하는 방식이고, 이를 강한결합이라 한다. 느슨한 결합 객체를 주입받는 다는 것은 외부에서 생성된 객체를 인터페이스를 통해 넘겨받는 것이다. 이렇게하면 결합도를 낮출수 있고, 런타임 시에 의존관계가 결정되기 때문에 유연한 구조를 가진다. SOLID의 원칙 중 O에 해당하는 Open Closed Principle을 지키기 ..

[ Spring ] 08. Component Scan

Component Scan xml 설정파일에 서 모든 빈을 으로 일일이 등록해줘야 하는 것은 매우 번거로운 일이다 그래서 등장한것이 Component Scan이다. test.xml 위와 같이 내부 filter 태그가 없다면, base-package에 지정한 패키지에서부터 모든 하위 패키지를 scanning해서 빈을 등록하도록 한다. 모든 클래스를 빈으로 등록하는 것은 아니고, @Component Annotation이 붙은 클래스를 빈으로 등록한다. ApplicationContext.xml Servlet-Context.xml 위를 보면 Servlet-Context.xml 설정 시, use-default-filters 속성을 false로 처리 하였다. use-default-filters 속성은 원래 defa..

[ Spring ] 07. Spring의 IoC Container와 Application Context 계층 구조

IoC Container 기본적으로 스프링의 IoC 컨테이너는 스프링 애플리케이션에서 'Object 생성', '관계 설정', '오브젝트 사용 및 제거' 등의 역할을 수행하는 컨테이너를 의미한다. 스프링에서는 '빈 팩토리', '애플리케이션 컨텍스트'라고도 하고, 아주 간단한 표현으로 Application Context 인터페이스를 구현한 클래스 오브젝트라고도 한다. 편의상 일반적으로 IoC컨테이너를 애플리케이션 컨텍스트라고 칭하고, 스프링을 개발할 때 이 애플리케이션 컨텍스트를 계층 구조로 만드는 경우가 많다. 애플리케이션 컨텍스트의 계층구조는 부모역할을 하는 root-application context(루트 애플리케이션 컨텍스트)와,..

[ Spring ] 06. Spring MVC Framework와 Dispatcher-Servlet

Spring MVC MVC 패턴을 적용한 Spring framework Spring에는 개발자들이 일반적으로 사용할만한 기능과 운영 방식들이 편리하게 정의되어 있다. Spring MVC에는 스프링이 제공하는 모든 기능을 잘 활용하기 위해서 스프링이 내가 작성한 자바 bean(객체)을 관리할 수있도록 해야 한다. Spring Framework 내부에는 IOC 컨테이너가 존재해 내가 등록한 bean(객체)을 생성하고 관리해준다. -> 결합도(Coupling)을 낮출 수 있게 된다. 이를 위해 Dispatcher Servlet 이라는 Front-Controller 패턴의 Servlet을 가장 앞단에 둬서 컨테이너로 들어오는 모든 요청을 적절한 세부 컨트롤러로 작업을 위임해준다. 구성 DispatcherServ..

[ Spring ] 05. MVC패턴이란 무엇인가?

MVC 패턴 M, V, C가 나뉘어서 서버를 구성하는 모델을 모델2라고 하며 모델 1과 모델2의 차이도 있겠지만 여기서는 생략한다. M, V, C의 역할 Model(모델) 컨트롤러가 호출할 때, 요청에 맞는 역할을 수행한다. 비즈니스 로직을 구현하는 영역으로 응용프로그램에서 데이터를 처리하는 부분이다. 비즈니스 로직이란 업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부이다. DB에 연결하고 데이터를 추출하거나 저장, 삭제, 업데이트, 변환 등의 작업을 수행한다. 상태 변화가 있을 때 컨트롤러와 뷰에 통보해 후속 조치 명령을 받을 수 있도록 한다. 애플리케이션의 상태(data)를 나타내고 일반적으로 POJO로 구성된다. Java Beans Contoller(컨트롤러) 일종의 조정자라고 할 수 있다.(..

[ Spring ] 04. POJO (Plain Old Java Object)에 관해

POJO Plain Old Java Object 오래된 방식의 간단한 자바 오브젝트 라는 말로서, Java EE 등 중량 프레임워크들을 사용하게 되면서 점점 무거운 객체를 만들게 된 것에 반발해서 생겨난 개념이다. 오래된 방식의 간단한 자바 오브젝트가 무엇일까? 쉽게 말하자면, 특정 '기술'에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 일컫는다. 예를들어, ORM(Object Relationship Mapping)이 새롭게 등장했을 때를 생각해보자. ORM 기술을 사용하고 싶다면 ORM을 지원하는 ORM 프레임워크를 사용해야 한다. (대표적으로 Hibernate라는 프레임워크가 있다.) 만약, 자바 개체가 ORM 기술을 사용하기 위해서 Hibernate프레임워크를 직접 의존하는 순간,..