관리 메뉴

개발이야기

[Python Skill]Skill 인듯 Skill 아닌 정리 - 1 본문

Python /Python Skill

[Python Skill]Skill 인듯 Skill 아닌 정리 - 1

안성주지몬 2018. 7. 20. 14:34

이 카테고리에서는 BOJ에서 문제를 풀면서 깨달은

Python Skill 아닌 Skill들을 정리해보려고 합니다. 

간단한 자료구조, 코딩 스킬들을 정리하여 자주 보면서 익힐려는 것이 목표입니다 ! 


 

1. 입력 한줄에 받기 


입력이 "4 5 1" 형식으로 주어진다면 각각 다른 변수에 저장시키고자 한다면 어떻게 해야 이쁘게 코딩할 수 있을까여? 

방법은 stdin 라이브러리를 이용하는 것입니다.


<코드>

from sys import stdin

a,b,c = map(int, stdin.readline().split())


위와 같은 코드를 이용하여 만약 "4 5 1"을 입력 받았으면 a=4, b=5, c=1이 저장되게 됩니다.


map() 함수는 built-in 함수로 list 나 dictionary 와 같은 iterable 한 데이터를 인자로 받아 list 안의 개별 item을 함수의 인자로 전달하여 결과를 list로 형태로 반환해 주는 함수이다.

무슨말인지 잘 이해가 안됩니다. 위에 코드를 예시로 설명해보겠습니다.

map(int, stdin.readline().split())
만약 4,5,1 을 입력한다면 stdin.readline().split()의 결과 값은 각각 '4','5','1',이 됩니다. 이 각각의 item은 int함수로 변환해주는것이 바로 map의 기능입니다.


Tip) input() vs readline()

비슷한 기능을 하는 input과 readline에 차이는 무엇일까 ! 

https://stackoverflow.com/questions/22623528/sys-stdin-readline-and-input-which-one-is-faster-when-reading-lines-of-inpu




2. 파이썬에서 이차원 배열 사용하기 


파이썬에서는 배열이 아닌 리스트라고 부르는 자료형이 배열의 역할을 합니다. 따라서 이차원 배열을 만드는 것은 이차원 리스트를 만드는 것과 같습니다. 


다른 여러 방법이 있지만 한 줄에 이차원 배열을 선언할 수 있는 코드를 보여드리도록 하겠습니다.

이 코드는 입력을 5로 받았다면 5개의 원소를 가진 이차원 배열을 표현해줍니다.


<코드>

graph = [[] for _ in range(5)]


위와 같이 코드를 작성한다면 graph = [[], [], [], [] ,[]]이 됩니다. 각각의 이차원 배열을 추가하기 위해서는 append 매서드를 이용하여 추가해줄 수 있습니다.





graph 첫번째 인덱스에 1을 추가한 모습입니다

이차원 배열의 인덱스를 확인하듯이 graph[0][0]을 입력하면 원소 1의 결과값이 나오는 것을 확인할 수 있습니다.


3. 리스트 정렬해주기


그렇다면 graph 인덱스 각각을 정렬해주기 위해서는 어떻게 해주면 될까요?


<코드>

for _ in range(5):

graph[_].sort()


위와 같이 코드를 작성해주면 각각의 인덱스에 대해 정렬해 줄 수 있습니다. 참 쉽죠? 


4. 스택, 큐 구현 


스택, 큐를 c나 c++에서 구현하기 위해서는 stl 헤더 파일을 사용하거나 배열을 사용하여 구현할 수 있습니다.

Python에서는 간단히 리스트를 이용하여 push와 pop을 구현해줄 수 있습니다.


간단히 스택과 큐를 설명하면 스택은 맨 마지막에 들어온 원소가 pop을 하게 되는 경우 가장 먼저나가는 'Last In First Out(LIFO)'입니다.

반대로 큐의 경우는 먼저들어온 원소가 먼저 나가게 되는 'First In First Out(FIFO)' 입니다.


이를 구현하는 코드는 간단합니다.


<코드>

// 스택

a = []

a.append(1)

a,append(2)

a.pop()


이 경우 a = [1,2] 가 되며 pop을 하는 경우 가장 마지막에 들어온 2가 출력되고 a = [1]이 남게 됩니다.


<코드>

// 큐

a = [1,2]

a.pop(0)


이 경우 pop(0)을 하게 되면 0번 인덱스가 가장 먼저 pop이 되며 a = [2] 가 되게 됩니다.


Comments