본문 바로가기
728x90

분류 전체보기230

[보안] 정보보안 3요소 정보보안은 정보 및 정보 시스템을 허가되지 않은 접근, 사용, 공개 등으로 부터 보호함으로써 무결성, 기밀성, 가용성을 제공한다. 1. 무결성 (Integrity) 정보가 인가된 사람에 의해서만 데이터에 접근 또는 변경이 가능하다는 것을 의미 예) 오직 정부만이 한국은행을 통해 지폐를 만들거나 변경 가능하고 그렇지 않은 경우 위조지폐로 취급 2. 기밀성 (Confidentiality) 허가되지 않은 사용자 또는 객체가 정보의 내용을 알 수 없도록 함. 즉 허가된 사람만 정보를 알 수 있게함. (비밀 보장) 예) 방화벽 암호, 패스워드 등 3. 가용성 (Availability) 정보에대한 접근과 사용이 적시에 보장되는 상태. 정보 또는 정보 시스템이 원하는 때에 제대로 제공되어야 하는 것을 의미한다. 2021. 5. 28.
[보안] 대칭키 vs 공개키(비대칭키) 1. 대칭키 - 하나의 비밀키를 클라이언트와 서버과 함께 사용 (key가 1개) - 암호화와 복호화 키가 같은 암호화 알고리즘 장점 : 공개키에 비해 계산 속도가 빠름 단점 : 비밀키 하나만 알아내면 암호화된 내용 해독 가능 -> 정보 유출 위험 높음 - 대칭키 암호는 암호화 단위에 따라 스트림암호와 블록암호로 나뉨 - 대칭키 알고리즘 : DES, AES 등 2. 공개키 (비대칭키) - 공개키와 비밀키 존재 (key가 2개) - 공개키 암호를 구성하는 알고리즘을 비대칭 암호라고도 불림 장점 : 개인키로인해 대칭키 방식보다 보안성 높음 단점 : 공개키에 비해 계산 속도가 느림 - 암호화 키 = 공개키 = public key - 비밀 키 = 개인키 = private key - 암호화 키와 비밀키는 서로 다름.. 2021. 5. 28.
[소프트웨어공학] 디자인 패턴 💡디자인 패턴이란? 소프트웨어 디자인 패턴(software design pattern)은 소프트웨어 공학에서 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다. 소스나 기계 코드로 바로 전환될수 있는 완성된 디자인은 아니며, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 서술이나 템플릿이다. (출처 : 위키백과) - SW를 설계 할 때 자주 발생하는 문제를 재사용하여 해결할 수있도록 하는 해결책 - 이미 만들어져 잘 되는 것을 처음부터 다시 만들 필요 X - 패턴 : 각기 다른 SW 모듈이나 기능을 다양한 응용 SW 시스템을 개발할 때에도 서로 공통되는 설계 문제나 해결책에 공통점이 있다. 이러한 유사점을 패턴이라고 한다. 💡디자인 패턴 종류 G.. 2021. 5. 28.
[DB] Locking (잠금 기법) 💡Locking 이란? 데이터베이스에서 Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법이다. (트랜잭선 : DB의 나누어지지 않는 최소한의 작업 단위) 잠금 단위란 = 잠그는 단위 잠금 기법이란 = 하나의 트랜잭션이 데이터에 액세스 하는 동안 다른 트랜잭션이 그 데이터 항목에 접근할 수 없도록 하는 병행제어 기법. Lockd은 잠금 기법에서 사용하는 데이터 객체이다. 🍒Lock 종류 - 공유 잠금 (Shared Lock) 공유 잠금은 데이터를 읽을 때 사용되어지는 Lock이다. 공유 잠금은 공유 잠금끼리 동시에 접근이 가능하다. - 베타 잠금 (Exclusive Lock) 베타 잠금은 데이터를 변경하고자 할 때 사용되며, 트랜잭션이 완료 될 때까지 유지된다. 베타 잠금은 Lock이 해제 될 때까.. 2021. 5. 28.
[DB] 데이터 정규화 1NF, 2NF, 3NF, BCNF 💡데이터 정규화란? 데이터 베이스의 설계를 재구성. 불필요한 데이터를 제거하고, 삽입/삭제/갱신 시 각종 이상현상 방지를 하기 위함 💡데이터 정규화 목적 1. 불필요한 데이터 제거 2. 논리적인 데이터 저장 (이상현상 방지) 정규화는 제1정규화, 2정규화, 3정규화, BCNF, 4정규화, 5정규화로 나눌 수 있다. 보통 4, 5정규화까지는 하지 않는다고한다. 제 1정규화 제1정규화는 각 row마다 컬럼의 값이 1개씩 있어야한다. 즉, 컬럼의 값이 원자값이어야 한다. 예를들어 subject 라는 컬럼에 값이 math, biology 이렇게 2개의 값이 들어가면 제 1정규화를 만족하지 못 한다. 제 2정규화 2정규화는 테이블의 모든 컬럼이 완전 함수 종속을 만족한다. 완전 함수 종속이란 기본키 중에 특정 컬.. 2021. 5. 28.
[Codility] Lesson14. MinMaxDivision (Python) 1.문제 https://app.codility.com/c/run/training77EUN5-7HZ/ Codility Your browser is not supported You should use a supported browser. Read more app.codility.com 2.풀이 어느 회사에 코딩테스트로 비슷한 문제가 나왔었던 문제. 그 당시에는 완전탐색 문제인 줄 알았는데 이 문제를 풀면서 이분탐색을 적용해서 푸는 문제였다는 것을 알았다. 아무리생각해도 어떻게 풀어야할지 몰라서 구글링해서 참고하였다.. ㅎㅎ case1. K == len(A) 일 경우 : 모든 원소의 sum 반환 case2. K >= len(A) 일 경우 : 만약 A=[1, 5], K=3 이면 [],[1],[5] 이므로 max.. 2021. 5. 26.
[Codility] Lesson12. Chocolatesbynumber (python) 1. 문제 2. 풀이 def solution(N, M): x = 0 eat = [0] while(1): res = (x + M) % N if res == 0: break eat.append(res) x = x + M return len(eat) 처음에 while문으로 문제에 나온 그대로 풀다가 Time out... 그래서 풀이를 찾아보았다. 초콜릿을 먹는 개수는 N,M의 최대공약수의 배수 개수만큼 먹는다. 결국 최대공약수를 구하는 문제 3. 코드 def solution(N, M): a, b = N, M while(b): a, b = b, a % b gcd = a #최대공약수 answer = N // gcd return answer 참조 : https://killong.blogspot.com/2019/12.. 2021. 5. 24.
[Codility] Lesson9. MaxSliceSum (Python) 1. 문제 https://app.codility.com/c/run/training2B63MW-T7C/ Codility Your browser is not supported You should use a supported browser. Read more app.codility.com 2. 풀이 테스트케이스 1개가 안풀려서 답을 찾아봤던 문제. 이 문제의 해결 포인트는 합이 음수가 나오기 전까지 계속 합을 더해주고, 음수가 나오면 그 다음 수부터 다시 누적합을 구하면된다. 왜냐하면 현재 음수보다 이전의 합이 더 작으면 앞으로 누적합을 더해도 합이 음수이기 때문에 그 만큼 합계가 작아지기 때문이다. 3. 코드 # you can write to stdout for debugging purposes, e.g. .. 2021. 5. 21.
[Codility] Lesson8. MaxDoubleSliceSum (Python) 1. 문제 https://app.codility.com/c/run/training7WK46H-9HS/ Codility Your browser is not supported You should use a supported browser. Read more app.codility.com 2.풀이 처음에 combination으로 만들수있는 인덱스(3개) 조합을 구하고 그 인덱스에 해당하는 합계를 구하니 시간초과가 났다 ㅜ,ㅜ 시간초과 해결 방법이 생각안나서 구글링으로 결국 해결,,, 전형적인 dp 알고리즘을 사용해서 풀어야하는 문제였다. 왼쪽-> 오른쪽 방향으로 배열의 누적 합을 미리 저장했었는데 왼쪽 2021. 5. 17.
[DB] Transation / Undo / Redo 트랜잭션을 공부하면서 나온 undo, redo 에 대해서 알게되어 정리를 해보려고한다. 트랜잭션이란? 데이터베이스 트랜잭션(Database Transaction)은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다. 이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장한다. 이 성질을 첫글자를 따 ACID라 부른다. 그러나, 실제로는 성능향상을 위해 이런 특성들이 종종 완화되곤 한다. 어떤 시스템들에서는 트랜잭션들은 논리적 작업 단위(LUW, .. 2021. 5. 17.
[Codility] Lesson5. PassingCars (Python) 1.문제 app.codility.com/demo/results/training7U86YM-SXN/ Test results - Codility A non-empty array A consisting of N integers is given. The consecutive elements of array A represent consecutive cars on a road. Array A contains only 0s and/or 1s: 0 represents a car traveling east, 1 represents a car traveling west. The goal is to count app.codility.com 2.풀이 prefix sum을 응용해서 뒤에서부터 합계를 sum 리스트에 저장했다... 2021. 5. 11.
[Codility] Lesson5.MinAvgTwoSlice (Python) 1. 문제 app.codility.com/c/run/trainingR25CEU-GHW/ Codility Your browser is not supported You should use a supported browser. Read more app.codility.com 2. 풀이 Timeout Error 시간초과 ㅜ__ㅜ 결과적으로 slice 크기가 2 또는 3일 경우에만 비교해야한다. (A+B) res: minval = res answer = p return answer 처음에 작성했던 코드. 시간초과로 Fail # return the smallest starting position of such a slice. # average = sum[P:Q]/(Q-P+1) def solution(A): mina.. 2021. 5. 11.
[Codility] Lesson5.Genomicrangequery (Python) 1. 문제 app.codility.com/c/run/training7N2BZJ-DMG/ Codility Your browser is not supported You should use a supported browser. Read more app.codility.com 2. 풀이 주어진 구간의 string에서 충격계수가 작은 값을 반환하는 문제 시간복잡도에서 점수를 못 받아서 다른 사람들이 푼 코드를 보고 해결했다. prefix sum(구간합) 알고리즘을 사용해야 한다. 근데 if문으로 간단하게 푼 솔루션이있어 if문으로 단번에 해결했다. 3. 코드 # A, C, G, T # 1, 2, 3, 4 #해당구간의 string에서 가장 작은 충격계수 반환 def solution(S, P, Q): res = [].. 2021. 5. 11.
[Algorithm] Prefix Sum 구간합 🍒구간합이란? -부분합 : 0~k 까지의 합 -구간합 : a~b 까지의 합 구간합은 말 그대로 시작점 a 부터 끝점 b까지 사이의 모든 값의 합을 의미한다. 🍒구간합 적용 구간합을 구하는 문제인데 구간사이의 수의 개수가 5천만개라면? 이러한 요청이 2천만개라면? 이중반복문을 사용해서 해결하면 분명 시간복잡도가 O(N^2)으로 오래걸리는 문제가 생긴다. int n; //요청 수 scanf("%d", &n); while(n--){ int a, b; scanf("%d %d", &a, &b); int sum = 0; for(int i=a; i 2021. 5. 11.
[Codility] Lesson4.PermCheck (Python) 1.문제 app.codility.com/demo/results/training3ZHYPZ-UUU/ Test results - Codility A non-empty array A consisting of N integers is given. A permutation is a sequence containing each element from 1 to N once, and only once. For example, array A such that: A[0] = 4 A[1] = 1 A[2] = 3 A[3] = 2 is a permutation, but array A such that: A[0] = app.codility.com 2.풀이 주어진 배열이 permutation이면 1, 아니면 0을 반환하는 문제 앞.. 2021. 5. 9.
[Codility] Lesson4. MissingInteger (Python) 1. 문제 app.codility.com/c/run/training67GEXN-3BR/ Codility Your browser is not supported You should use a supported browser. Read more app.codility.com 2.풀이 test case 딱 1개가 안풀렸던 문제. seq = 10005 길이의 마이너스 값이 섞인 integer로 구성된 배열 중 답이 101이 나와야하는데 계속 100이 나왔다. 그냥 단순히 최소 양수 int가 1부터이므로 pivot=1 로 시작하고 값을 비교해나가면서 pivot을 증가시키면 되었다. 마지막에 pivot을 return 너무 복잡하게 생각말고 단순하게 생각하고 문제푸는 습관을 길러야겠다. 3.코드 def solution.. 2021. 5. 9.
[Codility] Lesson4. Max Counters (Python) 1. 문제 app.codility.com/c/run/trainingNPTET7-BCU/ Codility Your browser is not supported You should use a supported browser. Read more app.codility.com 2. 풀이 Time out 이 났었던 문제. max값은 리스트의 값을 갱신할때마다 함께 갱신해주고 A[K] = N+1일 경우 max_val을 갱신해 준다. li[A[K]-1]의 값을 증가 counter + 1 할 때에는 해당 리스트의 값이 max_val 보다 작으면 max_val로 맞춰주면서 조정하고 그 후에 +1을 해준다. 시간복잡도를 생각하면서 풀어햐했던 문제. 3. 코드 def solution(N, A): li = [0 for _ i.. 2021. 5. 9.
[프로그래머스] 호텔방배정 (C++) 1.문제 programmers.co.kr/learn/courses/30/lessons/64063/ 코딩테스트 연습 - 호텔 방 배정 programmers.co.kr 2. 풀이 이 문제는 빈 방을 배정해 주었으면 그 방 현재 방 번호+1 또는 현재 방 번호+a 로 다음 빈 방번호를 가리키도록 갱신해주어야 한다. 이 방식을 어떻게 효율적으로하나 했더니 재귀함수를 이용해서 할 수 있었다. 즉, 재귀적으로 그 다음 빈 방 번호를 저장하는 것이다. (Union-find 방식) 그러면 O(nlogn)으로 해결 가능! 3. 코드 #include #include #include #include #include using namespace std; vector answer; map m; long long find(lon.. 2021. 4. 19.
[백준] 퇴사 (C++) #include #include using namespace std; /* 오늘부터 남을 N일 동안 최대한 많이 상담일 함 얻을 수 있는 최대 수익 출력 */ struct day { int t; //소요시간 int p; // 수익 }; day arr[20]; int answer = 0; int n; void dfs(int idx, int sum) { if (idx >= n) { answer = max(answer, sum); return; } //상담 안할 경우 dfs(idx + 1, sum); //상담 할 경우 (상담해도 되는지 조건 확인) if (idx + arr[idx].t > n; for (int i = 0; i > arr[i].t >> arr[i].p; dfs(0, 0.. 2021. 4. 13.
[백준] 연산자 끼워넣기 (C++) 1. 문제 www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 2. 풀이 재귀함수를 이용하여 해결 흔한 문제!! 숙지할 것 !!! 3. 코드 #include #include #include using namespace std; vector v; vector oper(4, 0); // +, -, x. % int _max = -999999999; int _min = 9999999999; int N; void d.. 2021. 4. 13.
728x90