전체 글 243

[BOJ] 2352. 반도체 설계

LIS를 이용하여 푸는 문제였다. 예를 들어 1-4 를 연결시켰다고 가정해보면 이제 다음 부터 연결할 수 있는 거는 좌측의 4보다 큰 값을 가진 선만 연결할 수 있게 된다. 따라서 이 문제는 자동적으로 최장 증가 수열의 길이를 찾는 문제가 된다. LIS를 만들 수 있는 방법은 크게 두가지 dp와 lower_bound가 있다. dp의 경우 n^2의 시간복잡도를 가지고, lower_bound는 nlogn의 시간복잡도를 가지는 이문제의 경우 n의 최대값이 40000이기 때문에 dp말고 lower_bound 기법을 적용하여 풀 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36..

Algorithm 2021.05.09

[BOJ] 19598. 최소 회의실 개수

1931.회의실 배정(링크)과 유사한 그리디 유형의 문제였다. 문제를 마주하였을 때 회의실 배정 문제와 상당히 유사하여 비슷한 방식으로 풀게 되었다. 우선 적으로 모든 회의를 시작 시간 기준으로 우선순위 큐에 넣어 정렬을 하였다. 그 후 현재 가장 빠른 시각에 시작된 회의의 끝나는 시간과 그 바로 다음에 시작하는 회의의 시작 시간을 서로 비교하여, 만일 현재회의 끝시간 > 다음회의 시작시간 이면 회의실을 하나씩 추가하는 방식으로 구현해보았다. 회의실 배정과 다른점은 회의실 배정은 하나의 회의실이기때문에 회의들을 1.끝나는 시간으로 회의정렬, 2. 현재 회의의 끝시간, 다음 회의의 시작시간 비교 이러한 방식으로 풀었지만, 이 문제는 회의실 자체를 늘리는 문제이기에 1. 시작 시간으로 회의정렬, 2. 현재 ..

Algorithm 2021.05.07

[BOJ] 2110. 공유기 설치

이분탐색을 이용한 문제였다. 집 좌표의 범위가 10억 그리고 최대 값을 구하는 문제여서 이분탐색으로 접근할 수 있었다. 우선 첫번째 집에 공유기를 설치한 것을 가정한 후 이분탐색을 이용해 설치길이를 정하여 다음집에 설치할 수 있는지 없는지 여부를 확인하며 답을 찾아갔다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 package algosutdy1; import java.io.BufferedReader; import java.io.InputS..

Algorithm 2021.05.05

[BOJ] 1043. 거짓말

유니온파인드를 이용하는 문제였다. 문제를 맨처음 접근함에 있어서 파티의 순서가 보장된다고 생각하여 단순하게 생각하였지만, 테스트 케이스를 보고 파티의 순서가 보장되지 않음을 알게 되었고 다시 생각하게 되었다. 다시 생각해보니 같은 파티마다 서로 연결되는 성질을 보았을 떄 유니온파인드가 생각이 나서 적용을 해보았다. 우선 파티의 인원을 전부 입력을 받고, 파티마다 참석자들을 union 해주었다. 그 후 이미 진실을 알고 있는 자 들과 파티의 참석자간의 루트값을 비교하여서 진실을 알고있는 사람들을 모두 선별해주고, 그것을 기준으로 거짓을 얘기할 수 있는 파티를 찾았다. 유니온파인드를 사용할때 주의할점이 있는데 서로의 루트 노드가 같은지를 확인할 때에는 단순히 p[i] , p[j] 값을 비교하는게 아니라 fi..

Algorithm 2021.05.04

[WEB] RestTemplate의 Connection Pool 설정

2021.01.23 - [Java&Web] - [WEB] RestTemplate을 이용하여 API 호출하기 [WEB] RestTemplate을 이용하여 API 호출하기 RestTemplate이란? RestTemplate은 Spring 3.0 부터 지원하는 템플릿으로 Spring에서 HTTP 통신을 RESTful 형식에 맞게 손쉬운 사용을 제공해주는 템플릿이다. Rest API 서비스를 요청후 응답 받을 수 있도록 설계. minkwon4.tistory.com RestTemplate의 Connection Pool이란 Spring 3.0부터 지원하는 HTTP 통신 템플릿인 RestTemplate은 복잡한 HttpClient 사용을 한번 추상화한 객체로써 단순 메소드 호출만으로 쉽게 HTTP 요청을 주고 받을 ..

Java&Web 2021.04.24

[Apache] Apache와 Springboot 연동하기(mod_proxy)

[Java&Web] - [WEB] Apache와 Tomcat 연동하기 [WEB] Apache와 Tomcat 연동하기 [Network] Web Server와 WAS [Network] Web Server와 WAS Web Server란? 개념 하드웨어적 의미로는 Web Server가 설치되어 있는 컴퓨터 소프트웨어적 의미로는 클라이언트의 요청을 받아 정적 컨텐츠(image, html,.. minkwon4.tistory.com Apache와 Springboot 연동(mod_proxy) Web Server로써 Apache를 Springboot의 내장 Tomcat과 연동하는 작업을 mod_proxy 방식을 사용하여 진행해보았다. mod_proxy 방식은 mod_jk방식에 비해 속도가 느리고, URL에 따른 설정이 ..

Java&Web 2021.04.11

[DB] HikariCP의 옵션

HikariCP의 옵션 HikariCP는 Springboot 환경 기준으로 application.properties에서 다음과 같은 옵션들을 적용할 수 있다. spring.datasource.hikari.minimumIdle : pool에서 관리하는 최소 유휴 connection의 수에 관한 설정이다. 기본값으로 maximumPoolSize와 같은 값을 가진다. spring.datasource.hikari.connectionTimeout : 클라이언트가 pool의 connection을 기다리는 최대 시간(밀리초, ms)에 관한 설정으로, 기본값은 30000ms(30초)이고, 최소값은 250ms이다. 또한 만일 최대 시간을 넘으면 SQL Exception이 발생한다. spring.datasource.hik..

Database 2021.03.31

[Security] CSRF와 XSS

CSRF란? CSRF는 Cross Site Request Forgery의 줄임말로써 사이트 간 요청 위조를 의미한다. CSRF는 웹사이트의 취약점 공격중의 하나로써 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(등록, 수정, 삭제 등)를 특정 웹사이트에 요청하게 하는 것을 의미한다. 즉, 공격자가 CSRF의 취약점을 이용해서 사용자의 권한을 도용하여 특정 웹 사이트의 기능을 수행하게 하는 것으로써 의도치 않게 광고성 게시물이나 유해 게시물을 작성하는 것이 대표적인 예시 중의 하나이다. CSRF 과정 CSRF 공격이 성공할려면 우선 사용자가 위조 요청을 전송할 웹사이트에 로그인하여 쿠키를 발급받아 놓은 상태여야 한다. 그 후 다음과 같은 과정을 거쳐서 CSRF가 일어난다. 공격자가 위조 요청을 준..

Network 2021.03.05

[Java] 람다식과 함수형 인터페이스(2)

[Java] 람다식과 함수형 인터페이스(1) [Java] 람다식과 함수형 인터페이스(1) 람다식(Lambda Experssion)이란? 람다(Lambda)는 JDK 1.8부터 추가된 것으로, 람다의 도입으로 인해 자바는 객체지향언어이지만 함수형언어의 특징까지 가지게 되었다. 즉, 함수형 프로그래밍으로써 람다 minkwon4.tistory.com 람다가 도입된 이유 빅데이터를 프로그램적으로 다룰 수 있는 방법이 필요해지면서 멀티 코어를 활용한 분산 처리, 즉 병렬화 기술이 필요했다. 이에 따라 자바에서는 병렬화를 위해 컬렉션(배열, List, Set, Map)을 강화했고, 이러한 컬렉션을 더 효율적으로 사용하기 위해 스트림을 강화했다. 또 스트림을 효율적으로 사용하기 위해 함수형 프로그래밍, 람다의 도입이..

Java&Web 2021.03.03

[Design Pattern] 여러가지 디자인 패턴과 간단한 예제

어댑터 패턴(Adapter Pattern) 호출당하는 쪽의 메소드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴 DB관련 프로그램을 작성해보면 다양한 DB시스템을 공통의 인터페이스인 JDBC를 이용해 조작한다. 이러한 JDBC는 어댑터 패턴을 이용해 다양한 DB 시스템을 단일한 인터페이스로 조작할 수 있게 해 준다. 자바의 JRE 또한 어댑터 패턴의 일종이다. JDBC와 JRE는 개방 폐쇄 원칙(OCP)의 예이기도 하다. 결국 어댑터 패턴은 개방 폐쇄 원칙을 활용한 설계 패턴이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 //어댑터 패턴 미적용 class ServiceA { vo..