[파이썬/자료구조] 스택(stack) LIFO(Last In First Out) 방식. 후입 선출이라고도 하며, 가장 먼저 들어간 값이 맨 아래에 깔린다. 가장 나중에 넣은 데이터를 가장 먼저 빼낼 수 있다. 프링글스 통에서 과자를 추가하고 꺼내는 형태와 같다. 스택 구조의 연산 Push : 스택에 값 추가. Pop : 스택 가장 마지막 원소를 삭제하고 반환. Peek : 스택 가장 마지막 원소를 반환.(삭제 x) Empty : 스택이 비어있으면 1, 아니면 0을 반환한다. 덱 라이브러리를 사용하면 리스트로 구현한 것보다 훨씬 빠르다. from collections import deque dq=deque() # 덱 생성 dq.append() # 덱의 가장 오른쪽에 원소 삽입 dq.popleft() # 가..
[파이썬] 큐(queue) 큐는 선입선출, FIFO(First In First Out) list append : 마지막에서 삽입 pop : 마지막꺼 제거 pop(n) : n번째 인덱스 값 제거 insert(n, x) : n번째 인덱스에 x값 삽입 queue = [1, 2, 3] queue.append(4) print(queue) queue.pop() print(queue) queue.pop(0) print(queue) queue.insert(0, 3) print(queue) [1, 2, 3, 4] [1, 2, 3] [2, 3] [3, 2, 3] 그러나 list는 무작위 접근(random access)에 최적화된 자료 구조이며 시간 복잡도가 O(N)이므로 데이터가 많아질 수록 느려짐. deque doubl..
파이썬 자료구조/알고리즘 10 : 소수 찾기 알고리즘 다음은 for~else문을 이용해서 1~1000까지의 소수를 출력하는 코드입니다. counter = 0 for n in range(2, 1001): for i in range(2, n): counter += 1 if n % i == 0: break else: print(n) print(f"나눗셈 실행 횟수 : {counter}") 2 3 5 (...) 983 991 997 나눗셈 실행 횟수 : 78022 for~else문은 for문이 break 등으로 빠져나가지 않고 끝까지 반복문을 수행했을 때 else문을 실행하는 구조입니다. 또한 for문이 실행되지 않는 경우에도 else문이 실행됩니다. 소수는 1과 자기 자신을 제외한 어떤 정수로도 나눠지지 않는..
파이썬 자료구조/알고리즘 09 : for ~ else문 응용하기 if 조건문과 따라다니는 else구문을 파이썬에서는 반복문과 함께 사용할 수 있습니다. for문이 중간에 break로 빠져나오지 않고 완전히 끝까지 실행되었을 경우 else문의 명령어가 실행됩니다. 또한 for문이 아얘 실행되지 않는 경우에도 else문이 실행됩니다. for와 else는 같은 라인에 쓰도록 합니다. 다음은 for~else문을 사용하지 않은 코드입니다. lst = [1, 3, 6, 4, 2] flag = 0 for i in lst: if i > 5: flag += 1 print('반복문 탈출') break if flag != 0: print('5보다 큰 수 발견') else: print('5보다 큰 수 없음') 반복문 탈출 5..
객체에 따른 인수, 매개변수의 교환 방식 인자, 인수, 매개변수의 차이 def sumsum(n): # n = 인자/매개변수/parameter s = 0 while n > 0: s += n n -= 1 return s x = int(input()) print(f'1부터 {x}까지 정수의 합 : {sumsum(x)}')# x = 인수/argument 파이썬에서 인수와 매개변수의 교환 방식 (이뮤터블의 경우) Immutable : 변경 불가능한 객체 String, tuple, 숫자 등 def sumsum(n): s = 0 while n > 0: s += n n -= 1 return s x = int(input()) print(f'1부터 {x}까지 정수의 합 : {sumsum(x)}') >> 5 1부터 5까지 ..
배열의 모든 원소 스캔하기 enumerate() 함수는 인덱스와 원소를 짝지어 튜플로 꺼내는 내장함수이다. range()와의 비교 x = ['a', 'b', 'c', 'd'] for i in range(len(x)): print(f'x[{i}] = {x[i]}') x[0] = a x[1] = b x[2] = c x[3] = d x = ['a', 'b', 'c', 'd'] for tup in enumerate(x): print(tup) for i, name in enumerate(x): print(f'x[{i}] = {name}') (0, 'a') (1, 'b') (2, 'c') (3, 'd') x[0] = a x[1] = b x[2] = c x[3] = d 튜플 형태를 반환하므로 인덱스와 값을 따로 뽑아..