반응형

2021/07 20

[Java-Algorithm] 백준 9093 단어뒤집기

문제 : https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 www.acmicpc.net 풀이 : StringTokenizer와 StringBuffer를 사용하여 간단하게 풀었다. 매 출력 후 sb 를 신규 instance를 생성해줘 값을 초기화 시켜서 사용했다. 뒤집는건 단어 역순으로 붙여 출력하는 방식을 사용했다. public static void main(String[] args) throws IOException { BufferedReader br = new B..

[Java-Algorithm] 백준 11650 좌표 정렬하기 풀이

문제 : https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 풀이 : Arrays.sort를 이용하여 풀어보았다... Comparator를 사용하면 비교가 쉬워지는데, 처음에 2차원 배열을 compare 안해봐서... 조금 당황했지만 그냥 되부렀네...~ public class Main{ public static void main(String[] args) throws NumberFormatEx..

[Java-Algorithm] 백준 11653 소인수 분해 풀이

문제 : https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 풀이 : 소인수분해는 어떤건지 다들 아실거라 생각한다. 간단하게 while문만으로 나눠주는 값을 하나씩 증가시키면서 나눠보려고 했는데 시간초과가 떴다... 뭐지...? 해당코드.. public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int i = 2; while(N >= i) { if(N % i == 0) { System.out.println(i); N /= i; } else { i..

[Java-Algorithm] Quick Sort 구현 및 설명

오늘은 Quick Sort에 대해 공부해 보려고한다. 이름에서도 보이는 바와 같이 빠른 정렬이다. 퀵 정렬의 메커니즘은 크게 다음과 같다. Sorting할 List를 피벗(pivot)을 기준으로 두 개의 부분리스트로 나누어 하나는 피벗보다 작은 값들의 부분리스트, 다른 하나는 피벗보다 큰 값들의 부분리스트로 정렬 후 , 각 부분리스트에 대해 다시 위의 로직을 재귀적으로 수행하여 정렬하는 방법이다. 쉽게 말해 부분을 나눠서 각각 자기가 맡은 부분을 정렬시킨다고 보면 된다. 로직 순서 1. 피벗을 선택 2. 피벗을 기준으로 양쪽에서 피벗보다 큰 값, 혹은 작은 값을 찾는다. 왼쪽에서부터는 피벗보다 큰 값을 찾고, 오른쪽에서부터는 피벗보다 작은 값을 찾는다. 3. 양 방향에서 찾은 두 원소를 교환 4. 왼쪽에..

[Java-Basic] Java 언어의 특징 및 OOP의 특징

자바는 제임스 고슬링 형님이 만든 대표적인 객체지향언어이다. 자바의 특징을 5가지로 나누어본다면 1). 객체지향 프로그래밍(OOP) 2). 자동 메모리 관리 (Garbage Collector) 3). 운영체제에 독립적 실행 -> JVM 4). 멀티쓰레드 지원 5). 동적 로딩 지원 한가지씩 살펴보자 객체지향 프로그래밍 (OOP) 객체지향프로그래밍의 대표적인 특징을 빼놓을 수 없을것이다. 대표적 특징에는 상속, 캡슐화(은닉화), 다형성, 추상화 가 있다. 객체지향 프로그래밍은 저러한 특징들을 이용하여 코드의 재사용성을 좋게 하고, 유지보수를 용이하게 만들며 개념별 관리가 편리하다. 1). 상속 : 부모 클래스의 변수 및 메서드 등을 자식 클래스가 전부 물려받아 사용(접근) 할 수 있는 성질 -> 자식클래스..

[SpringBoot] Filter 설정 및 개념

Spring에서 사용하다가 SpringBoot로 넘어가면서 기존에 정리해놓지 않았던 내용들을 적어놓으려고 한다. 필터란? Servlet의 ServletContext의 기능으로 보고, 사용자에 의해 서블릿이 호출 되기 전과 후로 사용자 요청/응답의 헤더 정보등을 검사 하고, 설정할 수 있다. 필터와 인터셉터의 차이점 필터의 작동 위치? : DispatcherServlet 앞에서 먼저 동작 인터셉터의 작동 위치 ? : 인터셉터는 DispatcherServlet에서 Controllr(Handler) 사이에서 동작 필터 Servlet Context의 기능 스프링 기능을 활용하기에 어려움 => 별도로 의존성을 주입해주어야 된다. 일반적으로 인코딩, CORS, XSS, LOG, 인증, 권한 등 을 구현 인터셉터 S..

[Spring-JSP] 어플리케이션 백그라운드 데몬쓰레드 + ServletContextListener

오늘은 서버 구동시 호출되는 메서드를 먼저 알아보고, 해당 기능을 통한 서버 데몬을 기록해 두려고한다. 필자는 Redis를 사용하여 서버에서 Redis를 Sub하고있는 서버 데몬을 만들었다. 이전에는 어플리케이션 뒷단에서 작동하는 Daemon Thread로 유용하게 사용할 수 있을 아이~! 다음은 필요한 정보들이다. 1). Redis properties를 가져오기 위하여 @PropertySoure를 사용한다. 2). ServletContextListener + @WebListener @WebListener 어노테이션을 사용하여 Tomcat에 Listener임을 알려주는 어노테이션인데, 해당 어노테이션을 통해 Tomcat에게 이거 리스너로 쓸거야! 라는것을 알려준 뒤, ServletContextListen..

[Spring-JSP] @WebListener 와 ServletContextListener

@WebListener Annotation은 Servlet-api 라이브러리를 가져와서 사용하는 어노테이션으로, 어노테이션을 달면 톰캣에게 이클래스는 Listener이다 라고 알려준다. 톰캣에게 나는 리스너다 라고 알려준뒤 ServletContextListener interface를 받아, contextInitialized와 contextDestroyed를 오버라이딩하여 메서드를 사용할 수 있다. #여기서 리스너란? 특정 이벤트(특정한 사건)가 발생하기를 '귀 기울여' 기다리다가 실행되는 컴포넌트(메서드나 함수)를 뜻한다. @WebListener public class ContextLoaderListener implements ServletContextListener { @Override public v..

[Spring-JSP] 초기화 메서드 Spring Bean 생명주기

오늘은 Spring에서 서버 기동후 모든 어플리케이션을 구동하기위한 세팅이 끝난 후 실행되야 되는 메소드를 구현하는 방법을 작성해두려고 한다. 필자는 Server 재기동시 DI작업을 마치고 난뒤 Redis에 이런저런 데이터를 캐싱해 놓을때 사용했다.(관리자정보, IoT정보 , 메뉴 등) Spring 생명주기와 관련된 부분이라, 전체적으로 기재해 놓으려고 한다.! 초기화 메서드 DI 작업 까지 마친 다음 실행되는 메서드로, DI를 통해 빈이 주입된 후에 초기화 할 작업이 있을때 초기화를 진행할 수 있다. 즉 초기화 메소드(initialization method)는 빈 오브젝트가 생성되고 DI 작업까지 마친 다음에 실행되는 메소드를 말한다. InitializingBean Spring에서 제공하는 인터페이스로..

[Knowledge] GitHub 프로젝트 올리기(윈도우)

1). Git을 설치한다. Git 설치는 Os Version에 맞는것으로 진행 2). Github에서 repository를 만들어준다. 3). 프로젝트 폴더 내부에서 git bash 실행 4). 초기설정 : 본인의 깃헙 name과 email입력 => git config --global user.name "이름" => git config --global user.email "이메일" => 확인 git config --list 5). 프로젝트 올리기 ### .git 파일 생성 $ git init ### 선택한 프로젝트 폴더 내의 **모든** 파일 버전 관리 $ git add . ### 버전 관리 tracking. 업그레이드 된 것은 untracking이라고 빨간 글씨표시 $ git status ### 커밋 ..

반응형