분류 전체보기(140)
-
[STUDY] DFS & BFS - 그래프 탐색
dfs와 bfs를 복습할겸 정리 해본다. BFS Breadth-first search 란 뜻으로 그래프의 너비를 탐색하여 search 하는 알고리즘 방식이다. 우선 알고리즘을 알기 전에 노드와 간선을 알아야 한다.어려워 보이지만, 노드는 하나의 데이터를 의미하고 간선은 그런 노드와 노드를 이어주는 연견 선을 의미한다. 1 . 우선 방문처리할 배열 arr을 정의,초기화하고 가장 처음에 있는 노드를 큐에 넣는다. 2 . 큐에서 노드를 pop하면서 arr에 넣고, 큐에 인접노드가 없다면 이와 인접한 인접노드들을 모두 큐에 삽입한다. 3 . 위 과정을 반복한다. 이 과정을 수행하면 그래프에 있는 값을 bfs를 통해 한 단계씩 순서대로 파악해 나갈 수 있다. 따라서 위의 값은 [1,2,3,4] 가 출력된다. DF..
2023.05.28 -
백준 [ALGORITHM] - DFS와 BFS (1260)
from collections import deque n, m, v = map(int, input().split()) # 그래프 초기화 graph = [[] for _ in range(n + 1)] for _ in range(m): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) def dfs(v): visited = [] stack = [v] while stack: node = stack.pop() if node not in visited: visited.append(node) for neighbor in sorted(graph[node], reverse=True): if neighbor not in visited: stac..
2023.05.28 -
[CTF] GreyCTF'23 write up
warm up 문제이다. f12후에 source에 2개로 나뉘어 있었다. grey{St3p_1_of_b4by_W3b} 해당 문제의 파일을 다운 받아보면 from flask import Flask, render_template, request import sqlite3 app = Flask(__name__) @app.route("/", methods=["GET"]) def index(): qn_id, ans= request.args.get("qn_id", default="1"), request.args.get("ans", default="") # id check, i don't want anyone to pollute the inputs >:( if not (qn_id and qn_id.isdigit() ..
2023.05.22 -
실전바이너리분석 - 6
1. 정적 디스어셈블 바이너리 분석 기술은 크게 두 가지로 구분할 수 있다. 첫 번째로 정적 분석과 두 번째로 동적 분석이다. 우선 정적 분석은 바이너리 파일을 실행하지 않고서 내부의 명령어 정보를 추출하여 이를 이용해서 흐름을 분석하는 방법인데, 이를 달성하기 위해서 디스어셈블 툴들은 아래와 같은 과정을 거친다. 바이너리를 로드함 -> 바이너리 내부의 기계어 명령을 찾음 -> 사람이나 컴터가 이해하고 처리할 수 있을 정도로 번역함 하지만 두 번째 과정이 달성하기 매우 어려운 편에 속하는데, 그 이유로는 2번 과정에서 많은 오류가 발생하기 때문이다. 이런 오류를 막기 위해서 2가지 방법이 고안 되었다. 1. 선형 디스어셈블 2. 재귀적 디스어셈블 두 방법 모두 각자의 장 단점이 존재한다. 우선 선형 디스..
2023.05.03 -
[STUDY] - 스택,덱,큐
스택 - STACK 우리가 데이터를 저장할 때 사용하는 stack과 스택 영역 메모리에서 변수등을 저장하는 stack, 모두 스택이라고 부르기 때문에 이에 유의해야함. 특징으로는 Last in First out이다 즉 가장 늦게 들어간 값이 먼저 나온다는 것이다. 덱 - DEQUEUE 좌우로 모두 데이터를 삽입,제거 할 수 있는 자료구조의 이름이다. 큐 - QUEUE 큐 자료구조는 FIFO구조이고, 덱과 비슷하지만 값을 넣을 수 있는 부분과 뺄수있는 부분이 각각 정해져있다.
2023.04.22 -
백준 [ALGORITHM] - 카드2 (2164)
n = int(input()) lst = [] for i in range(1,n+1): lst.append(i) for j in range(n-1): del lst[0] temp = lst[0] del lst[0] lst.append(temp) print(' '.join(map(str,lst))) 리스트로 구현하게 된다면 수가 커질경우에 리스트를 앞으로 하나씩 땡기는 과정에서 시간이 많이 소요되게 된다. 따라서 위 코드는 시간 초과가 발생한다. from queue import deque n = int(input()) lst = deque(range(1, n+1)) for j in range(n-1): lst.popleft() temp = lst.popleft() lst.append(temp) print(..
2023.04.21