\ '파이썬' 카테고리의 글 목록 :: Something New
728x90
반응형

스택이란 먼저 들어간 것이 마지막에 나오는 규칙

선입후출 FILO first In Last Out

스택의 ADT

boolean isFull()  : 스택에 들어 있는 데이터 개수가 maxsize인지 확인해 boolean값을 반환합니다. 가득 차 있다면 True,아니면 False

boolean isEmpty()  : 스택에 들어있는 데이터가 하나도 없는지 확인해 boolean값을 반환. 데이터가 하나도 없으면 True, 있으면  False

 void push(ItemType item) : 스택에 데이터를 푸시합니다.

ItemType pop() : 스택에서 최근에 푸시한 데이터를 팝하고, 그 데이터를 반환합니다.

Int top :스택에서 최근에 push한 데이터의 위치를 기록

ItemType data[maxsize] : 스택의 데이터를 관리하는 배열입니다. 최대 maxsize개의 데이터를 관리합니다.

push()를 하고 나서는 isFull()해서 데이터가 찼는지 확인하고

pop()를 하고 나서는 isEmpty()해서 데이터가 비어있는지 확인

실제로는 max_size(),isFull()은 사용하지 않고 isEmpty()함수는 len(stack)==0으로 검사합니다.

stack = [] #스택 리스트 초기화

def push(stack,item):
	#스택에 데이터를 추가하는 함수
    stack.append(item)
    print("데이터가 추가되었습니다")
    
def pop(stack):
	#스택에서 아이템을 꺼내는 함수
    if len(stack) ==0 :
    	print("스택이 비어 있습니다")
        return None
    else:
    	return stack.pop()

 

728x90
728x90
반응형

파이썬, vsCode

 

config파일을 다르게 바꾸고
config안에 config를 하나 더 만들것


manage.py linter 확장프로그램을 다운로드
vscode에서의 작업환경을 파이썬 버전과 맞춰서
airbnb-clone pipenv로 설정


파이썬은 런타임 언어
linter는 에러가 생길부분을 미리 감지
변수를 만들고 안쓰거나
선언되지않은 언어의 변수를 쓰려고 할때
실행시키면 에러가 뜨는데 실행전에 미리 알려줌
python pep : 파이썬 코드를 쓸때 권장사항
너무 길게 쓰지말것
pep8 코드를 어떻게 배치시키는지
하지 말아야할 파이썬스타일 가이드

flake8
setting.json에 설정

manage.py에서 install
pipenv버블을 작동시켜서
pipenv install flake8 --dev

pipfile확인
pakage 웹애플리케이션 동작할  때 필요한 패키지
dev-package 개발자가 개발할 때만 필요한 패키지

formatter 내 코드를 더 좋게 바꿔주는 것
 black --dev --pre

저장 할때 마다 formatting이 이루어짐
format on save 체크 하거나 setting.json파일 수정

한줄에 79자 이상은 불가
->수정  e501
python.linting.flake8Args --max-line-length-88

config 
__init__.py  장고파일
일종의 import

settings.py 장고가 제공한 admin.auth.미들웨어 등
템플릿 엔진을 제고
웹서버.데이터베이스. 패스워드 검사기 등등등

Django Documentation 문서 자료가 다 있음
https://docs.djangoproject.com/en/3.2/

728x90
728x90
반응형

파이썬 알고리즘에 자주 쓰이는 파이썬 내장 함수를 정리해보았습니다.

1.input

input([prompt])은 사용자 입력을 받는 함수

 

※ [ ] 기호는 괄호 안의 내용을 생략 가능

 

한 줄씩 여러 값을 입력받고 입력값들 중 최솟값 구하는 방법

graph = [int(input()) for _ in range(3)]

a=min(graph)

print(a)

 

입력값

>>1

>>2

>>3

출력 값

>>1

2.range

range([start,] stop [,step] )는 for문과 함께 자주 사용하는 함수

이 함수는 입력받은 숫자에 해당하는 범위 값을 반복 가능한 객체로 만들어 돌려줌

 

인수가 하나일 경우

시작 숫자를 지정해 주지 않으면 range 함수는 0부터 시작한다.

>>> list(range(5))

[0, 1, 2, 3, 4]

 

인수가 2개일 경우

입력으로 주어지는 2개의 인수는 시작 숫자와 끝 숫자를 나타낸다.

끝 숫자는 해당 범위에 포함되지 않는다는 것에 주의하자.

>>> list(range(5, 10))

[5, 6, 7, 8, 9]

 

인수가 3개일 경우

세 번째 인수는 숫자 사이의 거리를 말한다.

>>> list(range(1, 10, 2))

[1, 3, 5, 7, 9]

>>> list(range(0, -10, -1))

[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

3.list

list()는 반복 가능한 자료형을 입력받아 리스트로 만들어 돌려주는 함수.

//문자열의 경우
a=list("SOMETHINGNEW") 

//정수의 경우
b=list((1,2,3)) 

list 함수에 리스트를 입력으로 주면 똑같은 리스트를 복사하여 돌려준다.

 

결괏값

['S', '0', 'M', 'E', 'T', 'H','I','G','N','E','W'] 
[1, 2, 3]

4.map

map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다.

 

map은 입력받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려주는 함수

# n_times.py 

def n_times(x):
	 n=input()
	 return x*n

list(map(n_times,[1,2,3,4]))

함수는 리스트 요소를 입력받아 각 요소에 n을 곱한 결괏값을 돌려준다

입력값

2

결괏값

[2, 4, 6, 8]

 

*05-5 내장 함수 - 점프 투 파이썬 (wikidocs.net)를 참고, 변형하여 작성하였습니다.

728x90
728x90
반응형

다익스트라 최단 경로 알고리즘

0보다 작은 값을 가지는 간선이 없을 때 정상적으로 작동

특정한 노드에서 출발하여 다른 노드로 가는 각자의 최단 경로를 구해주는 알고리즘

 

구현하는 방법

1. 구현하기 쉽지만 느리게 동작하는 코드

2. 구현하기에 조금 더 까다롭지만 빠르게 동작하는 코드

 

 

import sys
input = sys.stdin.readlin
INF=int(1e9)

n,m=map(int,input().split())

start=int(input())

graph=[[]for i in range(n+1)]

visited = [False]*(n+1)

distance=[INF]*(n+1)

for _ in range(m)
	a,b,c =map(int,input(),split())
    graph[a].append((b,c))
    
def get_smallest_node():
	min_value = INF
    index =0
    for i in range(1,n+1)
    	if distance[i] < min_value and not visited[i]:
        	min_value = distance[i]
            index=i
    return index
    
def dijkstra(start):
	distance[start]=0
    visited[start]=True
    for j in graph[start]:
        distance[j[0]] =j[1]
    
    for i in range(n-1)
        now =get_smallest_node()
        visited[now]=True
        for j in graph[now]:
            cost = distance[now[ + j[1]
            if cost<distance[j[0]]:
                distance[j[0]]=cost
                    
dijkstra(start)

for i in range(1,n+1)
    if distance[i] == INF:
    	print("INFINITY")
    else:
    	print(distance[i])
        
        

 

 

*이 글은 [이것이 취업을 위한 코딩테스트이다 with 파이썬]을 혼자 공부하며 정리한 글입니다.

728x90
728x90
반응형

 

다이나믹 프로그래밍

연산 속도와 메모리 공간을 최대한으로 활용할 수 있는 효율적인 알고리즘을 작성해야하는데 

어떤 문제는 메모리 공간을 약간 더 사용하면 연산 속도를 비약적으로 증가시킬 수 있는 방법의 대표적인 방법

 

 

피보나치 수열을 재귀 함수로 구현

def fibo(x):
	if x==1 or x==2:
        return 1
    return fibo(x-1) + fibo(x-2)

print(fibo(4))

 

1.큰 문제를 작은 문제로 나눌 수 있다.

2. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다

 

위의 두 가지 조건을 만족할 때 다이나믹 프로그래밍을 사용 할 수 있다.

피보나치 수열은 이러한 조건을 만족하는 대표 문제이다.

 

메모이제이션기법이란?

다이나믹 프로그래밍을 구현하는 방법 중 한 종류로

한 번 구한 결과를 메모리 공간에 메모해두고 같은 식을 다시 호출하면

메모한 결과를 그대로 가져오는 기법을 의미한다.

메모이제이션은 값을 저장하는 방법이므로 캐싱이라고도 함

 

d=[0]*100

def fibo(x):
	if x==1 or x==2:
    	return 1
    if d[x] != 0:
    	return d[x]
    
    d[x]=fibo(X-1)+fibo(x-2)
    return d[x]

print(fibo(99))

 

요약

다이나믹 프로그래밍이란 큰 문제를 작게 나누고 

같은 문제라면 한 번씩만 풀어 문제를 효율적으로 해결하는 알고리즘

d=[0]*100

d[1]=1
d[2]=1
n=99

for i in range(3,n+1)
	d[i]=d[i-1]+d[i-2]

print(d[n])

->보텀업 다이나믹 프로그래밍 반복문으로 구현

 

일반적으로 재귀 함수보다 반복문을 이용한 경우가 오버헤드를 줄일 수 있고 다이나믹 프로그래밍 성능이 더 좋음

재귀 함수는 탑다운 방식;하향식

큰 문제를 해결하기 위해 작은 문제를 호출

반복문을 이용하는 보텀업 방식;상향식

작은 문제부터 차근차근 답을 도출

탑다운보다는 보턴 업 방식을 권장

 

 

코딩 테스트에서 특정한 문제를 완전 탐색 알고리즘으로 접근했을 때 시간이 매우 오래 걸리면 

해결하고자 하는 부분 문제들의 중복 여부를 확인해보고 다이나믹프로그래밍을 고려

 

*'이것이 취업을 위한 코딩 테스트다 with 파이썬'을 보고 요약, 정리한 내용입니다.

728x90

+ Recent posts