내일배움캠프 25일차 TIL

개발일지 시작의

알고리즘 3일차 화이팅

개발 업무내용

백준풀기, 알고리즘 강의 듣기

오늘의 이슈/고민..그리고 해결한 내용

1. stack

  • 한쪽에서만 자료를 넣거나 뺄 수 있는 선형구조(LIFO = Last In First Out), 후출선입 => 뒤로가기, 실행 취소 등에 활용
  • push(data) : 제일 위로 데이터 넣기
  • pop : 제일 위에 있는 데이터 뽑기
  • peek : 제일 위에 있는 데이터 보기
  • empty : 스택이 비어있는지 아닌지 확인
  • python에서 리스트를 이용해 스택을 구현할 수 있다
stack = []            # 빈 스택 초기화
stack.append(4)       # 스택 push(4)
stack.append(3)       # 스택 push(3)
top = stack.pop()     # 스택 pop
print(top)            # 3!

2. queue

  • 스택과 달리 선입선출(FIFO, First In First Out)방식으로 한쪽 끝에서 삽입, 다른 쪽 끝에서 삭제가 이루어짐 => 순서대로 처리해야 할 필요가 있는 일들(너비 우선 탐색, 은행 업무 등)
  • 선입선출 방식이기 때문에 데이터가 삽입만 쪽을 back혹은 rear 삭제만 되는 쪽을 front라고 함
  • enqueue(data) : back에 데이터 추가하기
  • dequeue : front에서 데이터 뽑기
  • peek : 제일 밑의 데이터 보기
  • empty : 큐가 비어있는지 아닌지 확인

3. 파이썬 입력받기

  • input
    - 무조건 문자열로 반환, 숫자 계산을 하려면 int로 형변환을 해줘야함
str = input()
num = int(input())
  • input.split()
    - 문자열을 특정 구분자로 나눌 때 사용, 기본적으로 공백을 기준으로 나눠줌
    • 변수 여러개에 저장 가능하지만 문자열 상태이므로 숫자 계산할 때는 int를 사용해 정수로 변환해줘야 함 -> 매번 이러면 귀찮으니까 map(int, input().split()) 사용
# [python input split]
str = input().split()
>>> ['python', 'input', 'split']

s, t, r = input().split()
>>> python input split

# 1 2 3
num1, num2 = input().split()
str = num1 + num2
num = int(num1) + int(num2)
>>> 12
>>> 3
  • map()
    - map(변환 함수, 순회 가능한 데이터)
    - 원본 리스트를 변경하지 않고 새로운 리스트를 생성
    - map 객체(map object)를 반환하기 때문에 list나 tuple로 변환해야함
    - 반복 가능한 객체(iterator object)를 반환
a, b, c = map(int, input().split())
>>> 1 2 3

b = map(str, input().split())
print(b)
print(list(b))
>>> <map object at 0x107d93a60>
>>> ['1', '2', '3']
  • sys.stdin.readline()
    - 대량의 데이터를 반복적으로 입력받을 때 input()대신 사용할 경우 속도가 향상됨(strip()이 적용되지 않아 개행문자까지 포함되기 때문에 input()보다 빠름)
    • 자바에서 Scanner보다 BufferedReader가 빠른 것과 같음
    • import sys 선언이 필요
    • 한 줄 단위로 입력받음 -> 한 개의 정수만 입력받을 때 \n도 같이 저장돼서 제거가 필요함
import sys

# 한 개의 정수를 입력 받아 저장할 때
read =  int(sys.stdin.readline())

# 정해진 개수의 정수를 입력 받아 저장할 때
a, b, c = map(int, sys.stdin.readline().split())

# 임의의 개수의 정수를 입력받아 리스트에 저장할 때
data = list(map(int, sys.stdin.readline().split()))

# 임의의 개수의 정수를 n줄 입력받아 2차원 리스트에 저장할 때
data = []
n = int(sys.stdin.readline())
for i in range(n):
    data.append(list(map(int,sys.stdin.readline().split())))

# 문자열 n줄을 입력받아 리스트에 저장할 때, strip()은 문자열 앞과 끝의 공백 제거
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)] 

To-do List

알고리즘 4주차, java강의 조건문까지, 3주차 숙제

참고

https://wikidocs.net
https://dojang.io/

좋은 웹페이지 즐겨찾기