반응형

분류 전체보기 154

클라우드, 컨테이너, 리눅스 해커들의 Target

클라우드, 컨테이너, 리눅스 환경이 해커들에게 주목을 받고 공격 대상이 되고 있다는 기사이다. 그 이유를 살펴보면 위 환경의 사용량이 높기 때문인데 확실히 많은 사람들이 이용하는 환경이 타겟팅도 많이 되고 취약점도 많이 나오는 것 같다. 애플의 macOS 가 보안성이 높아서 취약점이 적다 라고 말하는 사람이 많은데 이는 윈도우에 비해 사용자가 적다보니 그만큼 공격대상도 덜 되고 취약점도 적게 나오는 것이라 생각한다. macOS 사용자가 윈도우보다 더 많았다면 해커들이 불을 켜고 macOS의 취약점을 찾지 않았을까 싶다. 특히 컨테이너의 경우에는 만들어져있는 것이기 때문에 패치하기도 쉽지 않고 그대로 쓰는 경우가 많다. 찾아 볼수록, (이제는 신기술이라 하기엔 너무 가까워졌지만) 신기술이라 불리는 클라우드..

백준 1655번 가운데를 말해요

백준 1655번 가운데를 말해요 문제이다. 문제는 다음과 같다. 이번 문제도 우선순위 큐 의 분류로 들어있는 문제로 일반 배열을 사용해서 풀면 시간초과가 나올것이다. 최소 힙, 최대 힙을 통해서는 최소값, 최대값만 구할 수 있다. 중간값을 구하기 위해서는 조금 생각을 해주어야 한다. 이 문제에서는 이 최소 힙과 최대 힙을 둘 다 사용하여 양쪽의 갯수를 계속해서 맞춰주고 최소 힙의 첫번째 값과 최대 힙의 첫번째 값을 비교하면서 바꾸어 주면 중간 값을 구할 수 있을 것 같다. 코드는 다음과 같다. import sys import heapq n = int(sys.stdin.readline().strip()) minh = [] maxh = [] for i in range(n): num = int(sys.stdi..

백준 11279번 최대 힙

백준 11279번 최대 힙 문제이다. 문제는 다음과 같다. 문제를 보면 최대 힙 문제는 최소 힙 문제와 비슷하다. 처음엔 최소 힙 문제에서 pop을 배열의 마지막을 하면 되지 않을까 생각했다. 생각한대로 구현 후 출력을 하니 생각과 많이 달랐다. heap에서의 순서는 배열의 순서를 그대로 따라가지 않았다. 트리구조를 그대로 출력한다고 생각하면 이해가 빠르게 될 것이다. 그래서 힙 자체를 변형을 시키기로 했다 최소값이 맨 앞으로 오는 구조이기 때문에 이를 바꾸어 최댓값이 맨 앞으로 오도록 만들기로 했다. 값에 -를 붙이면 제일 큰수가 제일 작은수로 바뀌어 맨앞에 저장이 되고 출력할때만 다시 -을 붙여 출력하면 되는 것이다. 코드는 다음과 같다. import sys import heapq n = int(sy..

백준 1927번 최소 힙

백준 1927번 최소 힙 문제이다. 문제는 다음과 같다. 0이 나오면 배열에서 최소값을 출력하고 이외의 숫자는 배열에 넣어주는 문제이다. 이번 문제는 전에 풀었던 절댓값 큐 문제와 유사하다. 오히려 조건이 덜 들어간 쉬운 버전인 것 같다. 음수에 대한 처리와 우선순위에 대한 부분을 없애고 제출을 하니 바로 '맞았습니다' 가 나왔다. 코드는 다음과 같다. import sys import heapq n = int(sys.stdin.readline().strip()) arr = [] for i in range(n): ins = sys.stdin.readline().strip() ins = int(ins) if ins == 0: if len(arr) == 0: print(0) else: print(arr[0])..

백준 11286번 절댓값 힙

백준 11286번 절댓값 힙 문제이다. 문제는 다음과 같다. 요약해보면 첫번째로 몇번 입력받을것인지 N을 입력 받고 N번 입력을 받는다. 숫자가 0이 아닌 수가 나오면 배열에 저장하며 0이 나온 경우는 배열에서 절댓값이 가장 작은수, 절댓값이 같다면 원래의 값이 작은 수를 출력하는 문제이다. 처음엔 그냥 배열을 만들고 -값에 대한 처리는 -1인 경우 0.5, -2인경우 1.5 이렇게 +0.5를 한 후 절댓값을 구해서 동일한 양수값보다 조금 작게 만들어 정렬을 했을때 -값이 먼저 출력 되도록 했다. 하지만. 배열을 사용하고 sort()함수를 사용해서 그런지 시간초과가 발생했다. 찾아보니 heapq를 통해 우선순위 큐를 구현할 수 있었다. 이 heapq를 사용하면 입출력을 하면서 바로 대소비교되어 들어가기 ..

CVE란?

취약점 분석을 하는 사람들이나 공부를 해보면 CVE에 대해 들어보고 알 것이라고 생각한다. 혹시나 CVE가 무엇인지 모를 사람들을 위해 정리를 해보려고 한다. CVE는 Common Vulnerabilities and Exposures의 약자로 취약점을 분류하여 공지를 하기 위한 기준을 말한다. cve.mitre.org라는 사이트에 가보면 다음과 같이 써 있다. The misson of the CVE® Program is to identify, define, and catalog publicly disclosed cybersecurity vulnerabilities. 위의 사이트에서는 CVE를 번호로 분류하여 놓았고 이 번호를 통해 검색하고 해당 번호의 취약점이 무엇인지 확인이 가능하다. 이러한 CVE에 ..

백준 5430번 AC

백준 5430번 AC 문제이다. 문제를 살펴보면 문제만 봤을때는 R 과 D에 따라서 처리해주면 쉽게 되지 않을까 생각했다. 실제 코딩을 해보니 생각해줄 것들이 꽤나 있었다. 먼저 D를 통해 pop이 되기 때문에 최종 결과가 요소가 없는 []인 상태가 될 수 있다. 이떼는 error가 아닌 []가 출력되도록 해야 한다. 출력은 [x,y,z,...]의 형태를 만족시켜야 했다. 중간에 띄어쓰기가 있으면 안된다. 로직은 맞지만 돌려보니 시간초과가 나오는 경우가 발생했다. R은 연속으로 나오면 뒤집은걸 다시 뒤집기 때문에 원래의 상태가 된다. 따라서 RR인 경우 없애버리는 로직을 만들었지만 이 또한 시간초과가 발생했다. 뒤늦게 생각해보니 뒤집을 필요가 없었다... Deque이기 때문에 앞뒤로 빼내는 것이 가능하고..

백준 18258번 큐2

백준 18258번 큐2 문제이다. 문제를 보면 명령어를 계속해서 받고 명령어에 따라 큐를 처리해주면 되는 문제이다. 코드를 짜는 것은 쉽다, 하지만 리스트로 구현을 하는 경우 O(n)의 복잡도를 갖기 때문에 시간 초과가 발생한다. O(1)의 복잡도를 갖는다는 Queue를 사용하여 구현을 하려 했으나 어디서 큰 복잡도를 갖는것인지 시간초과가 나왔다... 결국엔 deque를 사용하여 풀었다. deque가 속도나, 사용하기에 훨씬 편한것 같다. 코드는 다음과 같다. import sys from collections import deque n = int(sys.stdin.readline().strip()) deq = deque() for i in range(n): ins = sys.stdin.readline()..

백준 2164번 카드2

백준 2164번 카드2 문제이다. 문제를 보면 문제만 보면 리스트를 반복문을 통해 요소를 삭제하고 맨뒤로 돌리고 반복해주면 쉽게 풀릴 것으로 보였다. 코드를 작성하고 제출을 했지만... 시간초과가 나왔다. 크게 시간복잡도가 큰게 없다고 생각해서 찾아보니 리스트의 del, insert와 같은 함수들은 시간 복잡도가 O(n)이라고 한다. deque를 이용하면 시간복잡도를 O(1)로 줄일 수 있다고 한다. 코드를 보면 import sys from collections import deque deq = deque() n = int(sys.stdin.readline().strip()) for i in range(n): deq.append(i) while True: if len(deq) == 1: break deq..

백준 1021번 회전하는 큐

백준 1021번 회전하는 큐 문제입니다. 처음에 문제 이해하기가 약간 까다로웠다. 설명에는 큐의 원소 갯수 n과 위치가 나온다고 설명이 되어있지만 입출력을 보면 둘째줄의 숫자들이 위치를 나타내는 숫자들이다. 입력의 첫째줄은 큐의 크기, 뽑아내려 하는 요소 갯수 이고 둘째줄은 요소의 초기 위치이다. 세가지 연산이 주어진다. 1번은 맨 첫번째 요소를 뽑아내는 연산 2번은 왼쪽으로 하나씩 밀고 첫번째는 맨뒤로 보내는 연산 3번은 오른쪽으로 하나씩 밀고 맨 뒤의 요소를 맨 처음으로 보내는 연산 출력 값은 사용되는 2, 3번 연산의 최소 횟수이다. 원하는 요소를 뽑아낼때 왼쪽으로 밀어낼지 오른쪽으로 밀어낼지를 결정하고 최소로 만들어야 할것이다. 추가로 입력을 줄 때 굳이 뽑아내려 하는 요소 갯수가 필요했을까? 둘..

반응형