본문 바로가기

Python_파이썬설명서

(6)
Python collections 모듈 deque와 일반 list 구조 비교 이전 글에서와 같이 파이썬에서 list를 쓸 때 아래 그림과 같은 push, pop연산은 (append()와 pop()을 통해 주로 사용) stack 구조상 시간복잡도가 O(1)로 무리없이 금방 할 수 있지만, 저 깊은 곳에 (그림 상으로 bottom가까이) 데이터를 삽입하거나 삭제하려고 한다면 성능이 낮아지는게 list의 특징이다. 따라서 큐 연산이 필요하게 되면 collections.depue()를 이용하여 연산을 하는게 성능에 이득이다. 파이썬 collections.deque()는 양쪽에서 데이터를 pop(),popleft()를 통해 삭제할 수 있고 삽입 역시 append(), appendleft()를 통해 할 수 있는데 자료 구조상 양 쪽으로 큐가 뚫린 형태라서 큐보다 더 효율적으로 양쪽으로 삽입..
파이썬에서 자료구조 이해가 코딩 테스트 및 알고리즘 성능 (시간복잡도)에 미치는 영향 주의) 제목은 거창하지만 본 내용은 노 베이스 비전공자 출신인 본인에게만 새롭고 유용한 내용이고 자료구조에 대해 빠삭한 사람에겐 너무 당연해서 어이없는 얘기. 본인과 같이 근본 없는 코딩 어린이는 코딩 문제를 파이썬으로 풀 때 가장 만만한 게 list 형태라고 느껴져 list를 참 많이 쓰는데 list에서 스택 형태의 참조나 연산을 할 때는 괜찮지만 큐 형태의 연산을 할 때는 주의가 필요하다. 이게 무슨 소리인고 하니 큐는 그림과 같은 구조로 데이터 삽입을 뒤에서 하면 삭제는 반대로 앞에서 하는 구조로 다시 말하자면 큐(queue)는 들어간 쪽과 나온 쪽 양쪽이 뚫려서 처음 들어간 게 쭉쭉 밀려서 앞쪽으로 나오고 그다음 들어간 게 그다음 앞으로 나오게 되는 FIFO (First In First Out)의..
백준 1181- 단어정렬 (딕셔너리 사용법과 sorted의 lambda 람다) 딕셔너리를 정의하는 방법에는 다음과 같은 방법들이 있다. dict_ex1과 같이 정석적인 방법, dict_ex2와 dict_ex3와 같이 한쌍의 키와 벨류로 이루어진 튜플을 구성하여 dict으로 바꾸는 방법. 백준을 좀 하다보니 이제와서야 딕셔너리가 문제 풀이에 효과적임을 깨닫고 있다;; 다음은 딕셔너리를 이용해 1181번을 해결한 코드이다. # 백준 1181(내거) import sys N=int(input()) li=[] for _ in range(N): li.append(sys.stdin.readline().rstrip()) li=list(set(li)) li_dic=sorted(li) leng=len(li) li_new={li_dic[i]:len(li_dic[i])*leng+i for i in ra..
백준 11729풀이와 해설 - 하노이탑 쌓기 def cnt(N): #몇번 옮기는지 세어주는 함수 N_time=1 for i in range(1,N): N_time=N_time*2+1 print(N_time) def move(N,start,fin): #어떤 순서로 탑에서 탑으로 이동하는지 나타내주는 함수 wait= list({1,2,3}-{start}-{fin})[0] #1,2,3중에 start와 fin빼고 남는거 if N>=2: move(N-1,start,wait) print("{0} {1}".format(start,fin)) move(N-1,wait,fin) if N==1: print("{0} {1}".format(start,fin)) disk_num=int(input()) cnt(disk_num) #몇번 움직이는지 먼저 출력 move(disk_..
python에서 ctrl+6 (^)처럼 제곱 표현하기 백준에서 두 원의 교점을 찾는 코딩을 간만에 하다가 ((x1-x2)^2+(y1-y2)^2)==(r1+r2)^2 과 같이 써서 표현하니 True가 반환되야할 지점에서 자꾸 False가 나와서 봤더니 ((x1-x2)**2+(y1-y2)**2)==(r1+r2)**2 아맞다 아래식처럼 python에서 제곱근은 ^이 아니라 **이라고 쓰는걸 깜박하고 있었다;; 오늘도 뻘짓 적립
Python 중괄호와 소괄호의 차이 대부분의 프로그래밍 언어에서 그렇겠지만 python에서 중괄호 [] 와 소괄호 ()는 혼동해서 쓰면 안되는 완전히 다른 것이다. 주로 중괄호는 배열 (array)를 구성할 때, 또한 배열의 특정 인덱스에 접근할 때 등등 이용하고 소괄호는 연산의 순서를 정해주고 싶을때, 개체의 메소드와 속성을 이용할 때 등등 사용하게 된다. 나도 아직 익숙하지도 않은지라 두 개를 자꾸 혼동해서 쓰곤 하는데 당신은 다음의 혼동을 쉽게 피할 수 있을 것이다. if False == False: print("True") #결과는 True. 위의 if문을 boolean 판정문으로 사용해서 False == False 값을 받아보면 당연히 True가 나온다. if 0 in [1,2,3]: print("True") else: print..