본문 바로가기

전체 글

백준 2193 다이나믹프로그래밍 N==1일땐 1 N==2일땐 1 N==3일땐 2 N==4일땐 3 N==5일땐 5 까지 직접 노트에 써보고 점화식이 f(N) = f(N-1) + f(N-2)라는걸 알아냈습니다. 그런데 제출을 해도 계속 틀렸다고 나왔습니다... 한동안 헤매다가 N에 90을 넣어봤는데 이상한 음수가 나오더군요. 값을 저장해둔 dp배열을 int형으로 선언해뒀는데 범위를 넘어가서 그랬습니다. dp배열을 long으로 선언하고 문제를 해결했습니다. 아래는 제 코드입니다. public class B2193 { private static int N; private static long dp[]; public static void main(String[] args) throws NumberFormatException, IOExceptio.. 더보기
백준 2156 다이나믹프로그래밍 두가지 규칙중 첫번째는 문제를 푸는데 아무 상관없는 규칙입니다. 연속으로 3잔을 연속 마실 수 없는 점만 문제에 영향을 줍니다. n번째 잔을 마실 차례라고 했을때 경우의 수는 세가지입니다. 1. n번째 잔을 안마신다 2. n번째 잔을 1연속으로 마신다 3. n번째 잔을 2연속으로 마신다 이 세가지 경우중 가장 큰걸 고르면 됩니다. 이걸 코드로 나타내면 아래와 같습니다. public class B2156 { private static int N, wine[] , dp[]; public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputS.. 더보기
SIGTERM이란 ? sigterm이란? sigterm이란 프로그램의 종료를 유발하는 신호입니다. sigkill과는 다르게 sigterm은 제어가 가능합니다. 프로그램 종료에 일반적으로 쓰인다고 볼 수 있습니다. Spring에서는 ApplicationListener 인터페이스를 상속받아 onApplicationEvent(ContextClosedEvent event)를 오버라이드 하여 해당 코드 안에서 동작할 소스를 작성하면 됩니다. import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextClosedEvent; public class GracefulShutdown implements Applicat.. 더보기
암호화란? (ECB 샘플 코드) 암호화 분류 1. 대칭키 방식 -암호화키와 복호화키가 같음 -키 전송 필요 -키 관리 복잡 -인증 고속 -구현 방식 : 블록, 스트림 -알고리즘 DES, 3-DES, SEED, ARIA, RC-4, AES 등 2. 비대칭키 방식 -암호화키와 복호화키가 다름 -키 전송 불필요 -키 관리 단순 -인증 저속 -구현 방식 : 소인수분해, 이산대수 -알고리즘 : RSA, DSA 등 3. 해쉬함수 스트림 기반 암호화와 블록 기반 암호화 1. 스트림 기반 암호화 -비트단위로 암호화 하는 방식 -LFSR, MUX Generator 등의 알고리즘 -속도가 빠르고 오류 전파 현상이 없음. -주로 오디오/비디오 스트리밍 시에 사용됨. 2. 블록 기반 암호화 -블록 단위로 암호화 -DES, AES, IDEA, SEED 등의 .. 더보기
NPM이란? NPM(Node Package Manager) 평소에 프론트에서 사용하는 라이브러리들을 npm 명령어를 통해 다운받아 사용하고 있었는데 정확히 뭔지는 한번도 검색해보지 않아서... 정확히 뭔지는 잘 모르고 있었습니다. 세계에서 가장 큰 소프트웨어 레지스트리입니다. npm에는 80만개가 넘는 코드 패키지들이 존재합니다. 오픈소스 개발자들은 npm을 이용해 코드를 공유합니다. 현재 직장에 정보보호팀에서 github랑 npm을 막았는데 github는 이해가 됐지만 npm은 이해가 되지 않았는데 이 한줄 보고 이해가 됐습니다. npm도 github처럼 제가 소스를 올릴 수 있는거였군요... npm은 CLI(Command Line Interface)를 제공하며, 이를 통해 다운로드, 설치, 공유가 가능합니다. n.. 더보기
백준 알고리즘 2217 분류에 그리디 알고리즘으로 들어가 있어서 풀어봤는데 도저히 그리디 방식으로는 풀 방법을 못찾겠어서 완전탐색으로 풀었습니다. 우선 예제는 10, 15가 주어져서, 마치 무게가 낮은 로프를 선택한 뒤 전체 로프 수를 곱하면 되는 것처럼 느껴졌습니다. 그런데 10,15가 아니라 1,10,15면 1을 선택 할 경우 최대 중량이 3밖에 안되어 여전히 10을 선택할 때 최선의 선택이 되었습니다. 그래서 역순으로 배열을 정렬한 뒤 한개를 선택했을 때 버틸 수 있는 최대 중량, 두개를 선택했을 떄 버틸 수 있는 최대 중량, 이렇게 계속 비교하면서 for문을 종료했습니다. 제 코드는 아래와 같습니다. public class Main { private static int N; private static Integer re.. 더보기
그리디 알고리즘 백준 5585 이 문제는 굉장히 쉬운편이었습니다... 그냥 다중 if문으로 해도 해결이 되는 쉬운 문제였어요. N으로 주어진 수를 1000에서 빼고 뺼 수 있는 수를 차례대로 빼면 완성이됩니다. public class Main { private static int N,res; public static void main(String[] args) throws IOException{ BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()); res = 0; N = 1000-N; while(N != 0) { if(N>=500) { res++; N = N-500; }else if(N>=10.. 더보기
백준 1931 그리디 알고리즘 우선 저는 처음에 시작시간이 가장 빠르고 시작 시간이 같다면 회의시간이 짧은 순서대로 정렬을 했습니다. 근데 그렇게 하니 계속 답이 이상하게 나와서... 곰곰히 생각을 했는데 종료시간이 빠른 순서대로 정렬을 해야하는게 맞더라구요. 그래서 그렇게 정렬을 하고 마지막 종료시간과 같거나 큰 회의시간이 있으면 res를 플러스 1 해주었습니다. 다음은 제 코드입니다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.StringTokenizer; public class B1931 { private static int N; .. 더보기