파이썬 알고리즘 정복하기
1. 기본 문법 공부 (21/04/12~ 09/04: 완료)
2. 코드업 알고리즘 100제 기본 문제집 풀기 (21/04/15 ~ 04/16 : 완료)
문제집 / Python 기초 100제
codeup.kr
3. 백준 온라인 저지 단계별로 풀어보기 (21/04/17~ 05/15 부분 완료)
단계별로 풀어보기
단계별은 @jh05013님이 관리하고 계십니다. 단계제목설명정보총 문제내가 맞은 문제1입출력과 사칙연산입력, 출력과 사칙연산을 연습해 봅시다. Hello World!112if문if문을 사용해 봅시다.53for문for문을
www.acmicpc.net
→ 1번 과정과 병행하면서 진행
정말 불필요한 노가다 문제 다 뛰어넘고 기본기 익히는 정도로 진행 중
동적 계획법2, 최단 경로 트리, 유니온, 최소신장 까지는 진행하려 했으나
진도가 급격히 느려져서 4번 부터 진행하게 되었음. (2021-05-15)
4. 그리디 알고리즘부터 그래프 탐색, 기본 DP 문제 50개씩 풀기 (21/05/16 ~ 중단)
→ 중단 후 문자열/그리디/DP/그래프탐색/구현 1문제 씩 매일 풀기 진행 중 (21/08/22 ~ 진행중)
- 그리디
https://www.acmicpc.net/problemset?sort=ac_desc&algo=33 - 그래프 탐색
https://www.acmicpc.net/problemset?sort=ac_desc&algo=127
https://www.acmicpc.net/problemset?sort=ac_desc&algo=126 - DP
https://www.acmicpc.net/problemset?sort=ac_desc&algo=25
→ 웹 개발 공부와 병행 중 (2021.05.25 ~ )
거의 8월까지 회사 일이 바빠서 진행못하다가 8월 이후로 진행 중.
5. 그래프, 중급/고급 동적 프로그래밍, 문자열 심도있게 들어가기 (커밍쑨)
6. 프로그래머스 사이트에서 카카오 코테 기출문제 풀기 (21/09/03 ~ 진행중)
https://programmers.co.kr/learn/challenges
1. 기본 문법 부터 마스터
프로그래밍 언어는 이론/실습의 끊임없는 병행이 답이다.
▶ Step1. 환경 구성
파이썬(python) 설치, 환경 구성 (VS Code)
파이썬 설치, 환경 구성 1. Python 및 Visual Studio Code 설치 - Python 다운로드 다운로드 방법 : Download > .exe 파일 실행 > Install Now (Add Python 3.x to Path 채크) > 설치완료 - Visual Studio Code..
11001.tistory.com
▶ Step2. 파이썬 문법 정리
무엇을 배우든 공식 document 가 가장 정확하고 신뢰성있다.
파이썬 자습서 — Python 3.9.4 문서
파이썬 자습서 파이썬은 배우기 쉽고, 강력한 프로그래밍 언어입니다. 효율적인 자료 구조들과 객체 지향 프로그래밍에 대해 간단하고도 효과적인 접근법을 제공합니다. 우아한 문법과 동적 타
docs.python.org
파이썬 언어 레퍼런스 — Python 3.9.4 문서
docs.python.org
용어집 — Python 3.9.4 문서
같은 형의 두 인자를 수반하는 연산이 일어나는 동안, 한 형의 인스턴스를 다른 형으로 묵시적으로 변환하는 것. 예를 들어, int(3.15)는 실수를 정수 3으로 변환합니다. 하지만, 3+4.5 에서, 각 인자
docs.python.org
파이썬은 어떤 언어인가?
- 파이썬은 인터프리터 언어로, 컴파일/링크 단계가 없어 개발 시간 단축됨
(인터프리터 언어 : 위에서 부터 차례로 한줄씩 읽고, 해석해서 실행하는 방식) - 고수준의 자료형 때문에 복잡한 연산을 한 문장으로 표현할 수 있음.
- 문장의 묶음은 괄호 대신에 들여쓰기를 통해 이루어짐.
(Tap or Spacebar4번) - 동적 타이핑 언어
(변수 초기화 시, 언어가 알아서 타입을 할당) - 파이썬의 모든 것은 객체로 이루어져 있다.
- 파이썬 소스 파일들은 UTF-8으로 인코드 된 것으로 취급
제일 기본적으로 알아야 되는 내용들
파이썬(python) 과 C언어의 변수 저장 방식 차이
변수 저장 방식 차이 C언어 메모리 공간을 할당 받고 값을 집어 넣어서 사용하는 방식이다. 메모리 공간을 할당받는 방식이 정적/동적으로 나뉜다. 정적 메모리 할당 컴파일시 고정된 크기/타입
11001.tistory.com
파이썬(python) 값 전달, 참조 전달
Call by value (값에 의한 호출) 함수의 인자로 실제 변수를 넘기지 않고 변수의 값(객체)를 복사하여 인자로 넘김 Immutable (불변) 객체가 이에 해당된다. def func(name): name = 1 → a와 다른 메모리에 존재
11001.tistory.com
입출력
1. 콘솔로 입출력 하기
1) 내장 함수 사용
- 입력 : input()
- 출력 : print()
2) sys 라이브러리
import sys
- 입력 : sys.stdin.readline()
- 출력 : sys.stdout.write()
2. 파일로 입출력 하기
- 파일열기 : open(파일명, 'r')
3. 입출력 속도 차이 비교
데이터가 많을 수록 입출력 속도 차이가 심하게 난다.
sys.stdin.readline() > input()
sys.stdout.write() > print()
입력 속도 비교
여러가지 언어와 입력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일
www.acmicpc.net
출력 속도 비교
여러가지 언어와 출력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 총 N개의 줄에 1부터 10,000,000까지의 자연수를 한 줄에 하나씩 출력하는 시간을 측정. 10번 측정해서 평
www.acmicpc.net
파이썬(python) - 입출력
콘솔로 입출력 하기 1. 내장 함수 사용 ○ 입력 : input() input() 동작 : 콘솔 입력 → (Enter) → str변환 → '\n'(개행)제거 → 반환 input("문구") 동작 : "문구"출력 → 콘솔 입력 → (Enter) → str변환 →..
11001.tistory.com
자료 형
자료형 마다 부여된 성질을 이해해야 한다.
Sequence(연속적인 값이 이어진 형태)/집합/매핑 → Iterable(for문으로 순차접근 가능)
Literal(상수) → Immutable(변경불가능)
str(문자열) → Literal(상수) 이면서 Iterable(순차접근 가능)한 특수한 형태.
자료형 | Iterable | Literal / Container | Mutable / Immutable |
int | X | Literal | Immutable |
float | X | Literal | Immutable |
list | O | Container (Sequence) | Mutable |
tuple | O | Container (Sequence) | Immutable |
range | O | Container (Sequence) | Immutable |
str | O | Literal (Sequence) | Immutable |
bytes | O | Literal (Sequence) | Immutable |
byte array | O | Container (Sequence) | Mutable |
set | O | Container (Set) | Mutable |
frozenset | O | Container (Set) | Immutable |
dict | O | Container (Mapping) | Mutable |
데이터 저장 방식에 따른 분류
Literal 형 : 변경불가한 단일 데이터
Container 형 : 여러가지 객체를 내부에 저장
- Sequence 형 : 순서있는 복수 데이터모음
- Set 형 : 순서, 중복없는 복수 데이터모음
- Mapping 형 : key:value를 1대1 매핑한 복수 데이터모음 (key는 중복x)
변경 가능성에 따른 분류
- 변경 가능(Mutable) : 데이터 변경이 가능한 성질 (데이터 추가/삭제 등의 메소드 존재)
- 변경 불가(Immutable) : 데이터 변경 불가능한 성질. 변경되는 것 처럼 보이지만, 실제로는 새 객체 만들어짐.
이터러블(Iterable)
다음 요소에 순차적으로 접근하여 조회 가능한 형태 (반복문 사용가능)
Iterable은 for문에서 iterator object로 변환되어 순차 접근 가능한 객체로 이용됨
파이썬(python) - 이터레이션 형 (Iteration)
이터레이션 형 (Iteration) 이터레이션(Iteration) : 어떤 객체의 원소에 하나씩 차례로 접근하는 것 - 이터러블(Iterable) : 이터레이션 가능하며 Iterator 객체로 변환가능한 객체 - 이터레이터(Iterato
11001.tistory.com
자료형의 더 자세한 내용은 아래 게시물 참고
파이썬 (python) 자료형
자료 형 자료형 마다 부여된 성질을 이해해야 한다. Sequence(연속적인 값이 이어진 형태)/집합/매핑 → Iterable(for문으로 순차접근 가능) Literal(상수) → Immutable(변경불가능) str(문자열) → Literal.
11001.tistory.com
자료 형 잡기술
각 자료 형의 활용도를 극대화 시켜주는 잡기술을 배워보자.
리스트 잡기술
파이썬(python) 리스트 잡기술
zip 함수 여러 개의 iterable 객체들을 지퍼를 닫아주듯 번갈아가며 짝지어서 튜플 형태의 iterator로 반환 길이 다르면 나머지 버려진다. zip(iterable_1, iterable_2) - output : zip 객체(iterable=반복가능)..
11001.tistory.com
파이썬(python) 정렬 (sort)
이터러블 정렬 (반환됨) sorted(iterable, key, reverse=False) ○ 오름차순 / 내림차순 a = sorted(iterable) : 오름차순 정렬 b = sorted(iterable, reverse=True) : 내림차순 정렬 ○ 특정 값을 기준으로 정렬..
11001.tistory.com
문자열 잡기술
파이썬 (python) 문자열 뒤집기 (reverse)
문자열 뒤집기 1. list 로 변환하고 list.reverse() 사용 a = 'abcde' list(a).reverse() : 반환값 없이 자기자신을 변경 c = ''.join(b) c = 'edcba' 2. reversed() 함수 사용 reversed(str) : reversed object..
11001.tistory.com
파이썬 (python) 문자열 중복제거 (unique)
문자열 중복제거 1. set로 변환 후 join 함수 사용 : 순서보장 X s = 'aaabbbccc' b = ''.join(set(s)) print(b) # cba 2. dict.fromkeys(word) 파이썬 3.6부터 dict가 순서보장하기 때문에 사용가능 s = 'aaabbb..
11001.tistory.com
iterable객체가 비어 있는지 확인 (empty check)
Null Check / Null 확인 / NULL확인 / Null 값 확인
Null 아니면 TRUE
Null 이면 FALSE
if var :
if var != None :
if var is not None :
all 함수 / any 함수
1. all(iterable)
- iterable(반복 가능한 자료형)의 모든 요소가 True면 True, 아니면 False
- 아예 비어있으면 True
2. any(iterable)
- iterable(반복 가능한 자료형) 중 하나라도 True면 True, 아니면 False
- 아예 비어있으면 False
all 함수
all([1,1,1,1,2]) = True
all([0,1,1,1,2]) = False
all([]) = True
all('asdfasdf') = True
all('') = True
all('a','b',1,0) = False
all('a','',1,2) = False
all() = True
any 함수
any([1,1,1,1,2]) = True
any([0,1,1,1,2]) = True
any([]) = False
any('asdfasdf') = True
any('') = False
any('a','b',1,0) = True
any('a','',1,2) = True
any() = False
함수 (기본 문법 카테고리에 편입 예정)
함수 가변인자
함수에 입력을 원하는 만큼(가변적으로) 받을 수 있음
def profile(name, age, *language):
for lang in language:
print(lange, end=" ")
글로벌 함수 사용
age = 10 : global 변수
def profile(name):
age = 1 : local 변수
global age : global 변수 사용 → 함수 밖의 age가 수정됨
age = 1
유용한 표준 라이브러리
덱, 힙 등의 자료구조, 수학적 계산
순열,조합,누적합,카운터(등장횟수) 등 특수한 기능을 제공하는 유용한 라이브러리들을 알아보자
파이썬(python) 유용한 표준 라이브러리
표준 라이브러리 내장 함수 : sum(), min(), max(), sorted() 참고로 pow(a,b,n) 함수는 아래와 같이 작동하지만 저렇게 작성한 것 보다 훨씬 효율적으로 작동하여 시간차이 많이남. x = a**d % n 아래 참고 20 se
11001.tistory.com
알고리즘
알고리즘 이론 자체는 언어 별로 공통적입니다. (한 번만 공부해두면 됨)
그러나, 언어 별로 문법이 다르기 때문에 코드로 어떻게 표현하는 지 익혀야 합니다. (핵심)
파이썬(python) 알고리즘 - 팩토리얼
백준 10872 : 팩토리얼 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 속도 : math.factorial > for > 재귀 1. math 라이브러리 사용 imp..
11001.tistory.com
파이썬(python) 알고리즘 - 소수 찾기
소수 판별, 소수 찾기, 소수 검사, 소수 판단 특정 숫자의 약수들을 나열했을때의 중앙값 <= 루트(n) 이라는 아이디어 사용 1부터 루트(n) 까지의 값으로 나눠서 0이면 소수로 판별. 4 : 1 2 4 루트(4) =
11001.tistory.com
파이썬 (python) 알고리즘 - 그리디 알고리즘
그리디 알고리즘 현재 상황에서 최적의 값을 탐욕적으로 취하는 알고리즘 그리디 알고리즘으로 얻은 해가 최적의 해를 보장할 수 없는 때가 많지만, 코딩 테스트에서는 최적의 해를 보장하도록
11001.tistory.com
파이썬(python) 알고리즘 - 백트래킹, DFS, BFS
DFS (깊이 우선 탐색) 깊이를 우선으로 탐색하는 알고리즘 스택 or 재귀함수 사용 (재귀도 사실은 스택구조임) 시작 노드에서 방문하지 않은 인접 노드를 방문. (방문 했음을 표시) 더 이상 인접 노
11001.tistory.com
파이썬(python) 알고리즘 - 동적 계획법 푸는 방법
DP문제를 풀어나가는 순서 1. 문제의 조건대로 손으로 그려보며 반복되는 부분을 찾습니다. 2. dp테이블 dp[i]는 무엇을 의미하는지 정의해봅니다. dp[i] = ??? 3. 디테일한 점화식을 세웁니다. dp[i] = dp
11001.tistory.com
파이썬(python) 알고리즘 - 최단 경로 찾기 (다익스트라)
최단 경로 찾기 (다익스트라) 양의 가중치가 있는 방향 그래프에서 최단경로 찾는 알고리즘이다. 특정 노드에서 출발하여 다른 모든 노드로 가는 최소/최대 비용 계산 가능하다. 매 순간 최저 비
11001.tistory.com
파이썬(python) 투 포인터
투 포인터 리스트에 순차적으로 접근해야할 때 두개의 포인터를 이용하여 합을 구하는 기법 O(N)으로 해결가능 1) a+b = k 시작점은 첫번째, 끝점은 마지막 원소를 가리킨 상태에서 시작. 이 경우
11001.tistory.com
심화 자료구조 / 알고리즘
심화 자료구조라고해도 코테 수준에서까지만 할 것임.
카카오 코테 광탈 기억을 되살리며
문자열 관련된 심화 자료구조를 깊이 다뤄볼 생각. (kmp, 트라이 등)
코테 알고리즘
최소 2021년 10월 전에는 이 수준에 도달하는 것을 목표
코딩테스트 연습
기초부터 차근차근, 직접 코드를 작성해 보세요.
programmers.co.kr
문제집: ★직접 코테 광탈하면서 모은 문제들☆ (danimartinwife)
www.acmicpc.net
근황 업데이트
22.09.26
- 취업 이후로 한동안 알고리즘과 이별하였다가 사내 스터디로 다시 시작하게 되었습니다 !
- 제가 포스팅 한거 제가 다시 읽으면서 감 되찾는 중 입니다.
- 일단 계속 꾸준히 할 예정..!