[파이썬 기초 암호 해킹] 서론
·
Hacking/Crypto
학습에 이용한 책은 '암호 해킹으로 배우는 파이썬의 기초' (알 스웨이가트 저, 신진철 역)이다. https://product.kyobobook.co.kr/detail/S000001804859 암호 해킹으로 배우는 파이썬의 기초 | 알 스웨이가트 - 교보문고 암호 해킹으로 배우는 파이썬의 기초 | 암호 해킹과 파이썬 코딩을 모두 맨땅에서 시작하는 책이다. 암호학도 파이썬도 모르는 사람뿐만 아니라, 프로그래밍 경험이 거의 없는 사람도 볼 수 있 product.kyobobook.co.kr 소스 코드 소스 코드는 https://nostarch.com/crackingcodes/ Cracking Codes with Python Cracking Codes with Python teaches you how to pr..
백준 11651 좌표 정렬하기 2 (Class 2 실버 5)
·
BOJ/Python
문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 출력 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다. 내 제출 import sys n = int(sys.stdin.readline()) arr = [] for i in range (n): (a, b) = map(int,sys.stdin.readline().split()) arr.append((..
백준 11650 좌표 정렬하기 (Class 2 실버 5)
·
BOJ/Python
문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 출력 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다. 내 제출 import sys n = int(sys.stdin.readline()) arr = [] for i in range(n): arr.append(tuple(map(int,sys.stdin.readline().split()))) arr..
백준 10866 덱 (Class 2 실버 4)
·
BOJ/Python
문제 정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 여덟 가지이다. push_front X: 정수 X를 덱의 앞에 넣는다. push_back X: 정수 X를 덱의 뒤에 넣는다. pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다. pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 덱에 들어있는 정수의 개수를 출력한다. empty: 덱이 비어있으면 1을, 아니면 0을 출력한다. front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에..
백준 10845 큐 (Class 2 실버 4)
·
BOJ/Python
문제 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 여섯 가지이다. push X: 정수 X를 큐에 넣는 연산이다. pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 큐에 들어있는 정수의 개수를 출력한다. empty: 큐가 비어있으면 1, 아니면 0을 출력한다. front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. 입력 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 ..
백준 4949 균형잡힌 세상 (실버 4)
·
BOJ/Python
문제 세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다. 정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다. 문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다. 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다. 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 한다. 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다. 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다. 짝을 이루는 두 괄호가 있을 때, 그 사이에 있..
백준 10828 스택 (Class 2 실버 4)
·
BOJ/Python
문제 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 스택에 들어있는 정수의 개수를 출력한다. empty: 스택이 비어있으면 1, 아니면 0을 출력한다. top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. 입력 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보..
백준 2839 설탕 배달 (Class 2 실버 4)
·
BOJ/Python
문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000) 출력 상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정..
CHAPTER 08 정렬
·
Data Structure
8.1 정렬의 종류 정렬(sort) : 주어진 원소(레코드)들을 원하는 기준에 의해 나열하는 작업 ex) 파일을 크기 순서대로 정렬, 시험 점수를 내림차순으로 정렬 주 메모리에서 처리하는 내부 정렬(internal sort)과 하드 디스크와 같은 외부 기억장치에서 처리하는 외부 정렬(external sort)로 구분한다. 레코드는 정렬의 기준이 되는 key field와 다른 속성들로 이루어져 있다. 외부 정렬 정렬할 원소 개수가 메모리보다 훨씬 큰 경우 외부 정렬을 수행해야 한다. 외부 기억장치에 정렬해야 할 전체 원소의 수가 N개가 저장되어 있고, 메모리의 크기가 m이라고 가정하자. 외부 정렬은 다음과 같은 순서로 진행된다. 1. N개의 원소를 m으로 나누어 N / m 개의 세그먼트로 분할한다. 2. ..
백준 2751 수 정렬하기 (Class 2 실버 5)
·
BOJ/Python
문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 내 제출 해설 처음으로 작성한 코드이다. n = int(input()) num = [] for i in range(n): x = int(input()) num.append(x) for i in sorted(num): print(i) 이 코드를 이용하면 Python3에서는 시간 초과가 발생하지만 PyPy3에서는 성공한다. PyPy3는 JIT..
CHAPTER 02 파이썬 자료구조
·
Data Structure
2.1 파이썬 언어의 특징 1. 파이썬은 인터프리터(interpreter) 방식의 언어이다. - 컴파일 과정 없이 문장 단위로 빠르게 실행과 테스트가 가능하다. 2. 파이썬은 객체 지향(object-oriented) 언어이다. - 클래스를 통하여 객체의 속성과 메소드를 정의하여 인간의 사고와 유사하게 고급 수준의 프로그램을 작성할 수 있다. 3. 파이썬은 동적 타이핑(dynamic typing) 언어이다. - C언어와 달리, 변수의 자료형을 선언할 필요 없이 변수에 값이 할당되는 순간 자료형이 결정된다. 4. 리스트, 집합, 딕셔너리 등 군집 자료형 기능이 우수하다. - 리스트, 집합, 딕셔너리 등 시퀀스 자료형과 군집 자료형 지원 기능이 우수하다. 5. 파이썬 변수는 값(리터럴)에 대한 참조이다. - ..
백준 1059 좋은 구간 (실버 5)
·
BOJ/Python
문제 정수 집합 S가 주어졌을때, 다음 조건을 만족하는 구간 [A, B]를 좋은 구간이라고 한다. A와 B는 양의 정수이고, A < B를 만족한다. A ≤ x ≤ B를 만족하는 모든 정수 x가 집합 S에 속하지 않는다. 집합 S와 n이 주어졌을 때, n을 포함하는 좋은 구간의 개수를 구해보자. 입력 첫째 줄에 집합 S의 크기 L이 주어진다. 둘째 줄에는 집합에 포함된 정수가 주어진다. 셋째 줄에는 n이 주어진다. 출력 첫째 줄에 n을 포함하는 좋은 구간의 개수를 출력한다. 제한 1 ≤ L ≤ 50 집합 S에는 중복되는 정수가 없다. 집합 S에 포함된 모든 정수는 1보다 크거나 같고, 1,000보다 작거나 같다. 1 ≤ n ≤ (집합 S에서 가장 큰 정수) 내 제출 L = int(input()) lst =..