전체 글 296

암호화1. 암호화방식(단방향, 양방향(대칭키, 비대칭키))

암호의 3요소 기밀성(Confidentiality) 무결성(Integrity) 인증(Authentication) 1. 단방향 암호화 방식 : 무결성을 위한것(돌이킬 수 없음) ex) md5 , sha : 해쉬 알고리즘 => 어떤 키가 조작되었는지를 확인할 수 있음. 2. 양방향 암호화 방식 : 대칭키(1개의 키) vs 비대칭키방식(2개의 키 for 암호화용&복호화용) 2-1. 대칭키=비밀키 ex) AES : 하나의 키를 이용해 암호화/복호화 하는방식 2-2. 비대칭키=공개키방식("공개키" + "비공개키" ex) RSA : 하나의 키로 암호화시, 나머지 다른키로 복호화 A의 공개키를 모두에게 공유. A의 공개키로 암호화 한 파일을 A는 비공개키로 복호화해서 본다. 전자서명 : RSA+Hash를 섞어서 써서..

Security 2020.12.10

웹사이트 제작시 무료 제작툴 사이트

http://============== 무료 제작툴 39개 모음 =================== 기획 http://trello.com/ https://www.notion.so/ . Notion – The all-in-one workspace for your notes, tasks, wikis, and databases. A new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your team www.notion.so 디자인 https://www.figma.com/ . 사진 https://unsplash.com . 코드 에디터 https://code.visualstudio.com/ ..

[JAVA] 백준 "단지번호붙이기"

필자의 코드는 계속해서 오답이라고 뜨는데, 모든 반례가 다 알맞게 출력된다. import java.io.*; import java.util.*; class Main { static int[][] grid; static boolean[][] visited; static int[][] vector = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}}; static int count; public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); grid = new int[n+1][n+1]; visited = new boolean[n+1][n+1];..

[JAVA] 백준 "바이러스"

간단히 BFS나 DFS를 통해서 시작노드1로부터 연결되어있는 지점을 방문처리하면 되는 문제다. 백준 테스트가 아직 적응이 안돼서, System.out.println으로 채점되는 것을 유의하지 못해서 시간을 질질 끌었다. 필자는 dfs로 방문하고 checked 가 true인 것의 개수를 세는 방식으로 체크하였다. 단, 1에서 전염시키는 컴퓨터의 수이므로 -1을 마지막에 해주어야한다. import java.io.*; import java.util.*; public class Main { //함수에서 사용할 변수들 static int[][] check; //간선 연결상태 static boolean[] checked; //확인 여부 static int n; //정점개수 static int m; //간선개수 st..

[JAVA] 백준 "DFS와 BFS"

가장 DFS와 BFS의 기본적인 유형이다. 살펴봐야할 포인트를 하나씩 짚어보겠다. 먼저 전체코드를 서두에 올려놓겠다. 전체코드 import java.io.*; import java.util.*; public class Main { //함수에서 사용할 변수들 static int[][] check; //간선 연결상태 static boolean[] checked; //확인 여부 static int n; //정점개수 static int m; //간선개수 static int start; //시작정점 public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc..

[JAVA] 그래프 "순서"

플로이드 워셜 알고리즘을 이용한다. 플로이드 워셜 알고리즘 : skmouse.tistory.com/entry/%ED%94%8C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%9B%8C%EC%85%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 플로이드 워셜 알고리즘 플로이드-워셜 알고리즘(Floyd-Warshall Algorithm)은 그래프에서 가능한 모든 노드 쌍에 대해 최단 거리를 구하는 알고리즘이다. DynamicProgramming 기술에 의거한다. "거쳐가는 정점"을 기준으로 최단거 skmouse.tistory.com for(m=1; m

플로이드 워셜 알고리즘

플로이드-워셜 알고리즘(Floyd-Warshall Algorithm)은 그래프에서 가능한 모든 노드 쌍에 대해 최단 거리를 구하는 알고리즘이다. DynamicProgramming 기술에 의거한다. "거쳐가는 정점"을 기준으로 최단거리를 구한다. 코드는 단순히 반복문을 3번 중첩시키기만 하면 되기 때문에 구현에 있어 크게 어려운 부분은 없다. 단, 유의하여야 할 점은 for문에서 가운데 노드(m)이 제일 위에 있어야 한다는 점이다. 시간복잡도는 O(V^3)O(V3)이다. 다익스트라 알고리즘과는 달리 모든 노드 쌍에 대해 최단 거리를 구하고, 음의 가중치를 가지는 그래프에서도 쓸 수 있다. 1을 거쳐가는 경우를 갱신한다 하면 => D[2,3] 과 ( D[2,1] + D[1,3] ) 을 비교하여 최솟값으로 업..

[JAVA] 그래프 "가장 먼 노드"

그래프의 가장 긴 깊이를 찾는 그래프 깊이 문제이다. 그래프 문제라고 해서 별 다른것이 아니라, BFS를 통해서 가장 깊이있는 경우를 마지막에 출력하면 그 깊이를 알 수 있다. check와 connect를 boolean으로 배열로 형성하여 방문했는지, 연결됐는지를 체크하는 용도로 사용한다. 이때 n이 아니라 n+1로 할당하는 이유는, 노드의 번호가 1부터 시작하기 때문이다. import java.util.LinkedList; import java.util.Queue; class Solution { public int solution(int n, int[][] edge) { boolean[] check = new boolean[n+1]; boolean[][] connect = new boolean[n+1]..

그래프 이론(싸이클, 최소신장트리, 위상 정렬)

先요약 일반적인 그래프를 구성할때는 싸이클이 있는지를 확인한다 : findParent 메소드 이용 두개의 노드를 간선으로 잇는 작업은 unionParent 메소드를 이용한다. 신장트리는 싸이클이 없어야하며, 모든 노드가 연결되어있어야한다 : 크루스칼 알고리즘으로 만든다. 위상정렬은 싸이클이 없고 방향그래프(DAG)인 상황에, 방향성에 거스르지 않도록 순서대로 나열하는 것. 그래프의 기본적인 이론에 대하여 알아보겠다. 아래의 메소드는 그래프 문제를 풀때 구현해놓으면 좋은 메소드이다. 1. findParent(int x) 메소드 : 루트노드가 아니라면, 해당 루트 노드를 찾을때까지 재귀적으로 findParent메소드 재귀호출. ex) findParent(3번노드) -> 재귀 findParent(2번노드) -..

[JAVA] 이분탐색(이진탐색) "입국심사", "징검다리"

입국심사 실패코드(완전탐색방법) class Solution { class Tester{ long startT, spendT; Tester(long startTime, long spendingTime){ startT = startTime; spendT = spendingTime; } } public long solution(int n, int[] times) { long answer = 0; long time =0; PriorityQueue q = new PriorityQueue(//오름차순 정렬. (o1,o2)-> (int)((o1.spendT+o1.startT) - (o2.spendT+o2.startT)) ); for(long t : times) q.offer(new Tester(0, t));//0초일..