분류 전체보기
-
유저별 세션 관리 작업을 진행하며 배운 점 🔧CS/네트워크 2022. 6. 23. 20:14
사내 어드민 페이지는 서비스를 사용하고 있는 유저들에 대한 정보를 조회, 관리하고 운영에 필요한 여러 가지 작업을 하는 공간이기 때문에 보안에 더더욱 신경 써야 한다. 현재 다니고 있는 회사의 어드민 페이지는 회사 네트워크 혹은 vpn을 통해서만 접근할 수 있기 때문에 어느 정도의 보안 수준은 충족한다. 그러나 유저별 세션 정보를 관리 안 하고 있었기 때문에 어드민 페이지에 한 번 로그인하면 로그인 상태가 유지되었으며, 로그인한 유저가 어떤 작업을 했는지에 대한 기록도 남지 않았다. 만약 유저가 악의적인 마음을 품고 데이터를 이상하게 변경한다거나 혹은 외부인이 사용할 수 있는 PC에 vpn을 설치하고 어드민 페이지에 로그인한 뒤, 로그아웃 하지 않았다면 보안적으로 문제 될 여지가 있다. 이런 문제점을 수..
-
[Javascript] Codility Lesson9 - MaxSliceSum알고리즘, 자료구조/Codility 2022. 6. 22. 22:00
문제: https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_slice_sum/ 문제 요약 정수로 구성된 배열 A가 주어졌을 때, 합산 결과가 가장 큰 연속 구간의 합을 구하여라. 풀이 function solution(A) { let maximum = A[0]; // 누적값을 저장할 변수 accum let accum = A[0]; for(let i = 1; i < A.length; i++) { // 누적값과 A[i]의 합이 A[i]보다 작으면 accum을 A[i]로 변경한다 accum = accum + A[i] < A[i] ? A[i] : accum + A[i]; // accum이 maximumq보다 크면 maximum을 acc..
-
[Javascript] Codility Lesson9 - MaxProfit알고리즘, 자료구조/Codility 2022. 6. 21. 21:33
문제: https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_profit/ 문제 요약 N개의 정수를 갖는 배열 A가 주어지며, 각 요소는 주식의 일별 가격을 나타낸다. 주식을 사고 팔았을 때 얻을 수 있는 최대 이익을 반환하고, 만약 이익을 내는 경우가 없다면 0을 반환한다. P는 주식을 산 날, Q는 주식을 판 날이며 0 0 ? profit : 0; return profit; }
-
[Javascript] Lesson 8 - EquiLeader카테고리 없음 2022. 6. 14. 21:59
문제: https://app.codility.com/programmers/lessons/8-leader/equi_leader/ 문제 요약: N개의 정수로 이루어진 배열 A가 주어진다. 전체의 과반 수를 초과하면 리더로 선출한다. 인덱스 S의 범위가 0 이상 N 미만이라고 했을 때, A배열을 A[0] ~ A[S], A[S + 1] ~ A[N − 1] 로 자르고, 양쪽에서 리더를 선출했을 때 각 리더가 동일한 정수인 경우의 수를 구하여라. 시도 1: function solution(A) { let lLeader = undefined; let lDomin = {}; let rDomin = {}; let equiLeaderCnt = 0; // 배열A에 포함된 각 정수의 개수 저장 for (let i = 0; i..
-
[Javascript] Codility Lesson 8 - Dominator알고리즘, 자료구조/Codility 2022. 6. 13. 20:13
문제: https://app.codility.com/programmers/lessons/8-leader/dominator/ 문제 요약: N개의 정수로 이루어진 배열 A가 주어진다. N의 범위는 0 ~ 100,000이다. 배열 A의 각 요소의 범위는 -2,147,483,648 ~ 2,147,483,648이다. 배열 A에서 절반 이상을 차지하는 정수(dominator)의 인덱스 중 하나를 반환하여라. 배열 A에서 절반 이상을 차지하는 정수가 없다면 -1을 반환한다. 시도 1: function solution(A) { let stack = []; for (let i = 0; i < A.length; i++) { // stack에 순서대로 정수를 넣고 stack.push(A[i]); // 2개 이상의 정수가 s..
-
[Javascript] Codility Lesson 7 - StoneWall카테고리 없음 2022. 6. 12. 17:07
문제: https://app.codility.com/programmers/lessons/7-stacks_and_queues/ 문제 요약: 배열 H에 들어있는 요소는(N) 벽의 높이를 의미한다. H[0] = 9, H[1] = 8, H[2] = 11... 이면, 맨 왼쪽부터 높이는 9m, 8m, 11m...로 울퉁불퉁한 형태의 벽이 이루어진다. N의 범위는 1 ~ 100,000 이다. H의 범위는 1 ~ 1,000,000,000이다. 벽을 쌓을 때 필요한 벽돌의 최소 개수를 구하여라. 시도 1: function solution(H) { let result = 0; let stack = []; // stack 요소의 합을 구할 때 이용할 함수 const getH = (list) => { return list...
-
[Javascript] Codility Lesson 7 - Fish알고리즘, 자료구조/Codility 2022. 6. 8. 20:44
문제: https://app.codility.com/programmers/lessons/7-stacks_and_queues/fish/ 문제 요약: 함수 인자로 A, B 배열이 주어진다. (A와 B의 길이는 동일) 배열 A 요소는 물고기의 크기를 나타내며 범위는 0 ~ 1,000,000,000이다. 숫자가 클수록 큰 물고기이다. 배열 B 요소는 0, 1로 이루어져 있고 물고기의 방향을 나타낸다. 0은 상류, 1은 하류로 움직이는 것을 의미한다. 큰 물고기가 작은 물고기를 잡아먹는다. 최종까지 살아남는 물고기의 수를 구하여 반환한다. 시도 1 function solution(A, B) { // 모두 같은 방향으로 움직인다면 모든 물고기가 살 수 있다. if (B.indexOf(0) === -1 || B.in..
-
[Javascript] Codility Lesson 6 - NumberOfDiscIntersections알고리즘, 자료구조/Codility 2022. 5. 16. 01:44
문제: https://app.codility.com/programmers/lessons/6-sorting/number_of_disc_intersections/ 문제 요약: 겹치는 원이 총 몇 쌍인지 구해야한다. 원의 반지름을 나타내는 정수를 요소로 갖는 배열 A가 주어진다. 배열 A의 길이 범위는 [1... 100000] 이다. 배열 A의 각 요소 범위는 [0..2147483647] 이다. 겹치는 원의 쌍이 10,000,000를 초과하면 -1를 반환한다. function solution(A) { let result = 0; let discsList = A.map((radius, point) => { return [point - radius, point + radius] }); discsList.sort(..