본문 바로가기

programming study

(889)
[항해99 1기] [Chapter2-2] 자료구조, 알고리즘 (17) (2021.3.19) Baekjoon Online Judge 백준 온라인 저지 사이트의 문제로 알고리즘 테스트 1920 문제 링크 import sys # 자연수 N 입력 받기 N = int(input()) # 정수 N개 입력 받기 arr1 = list(map(int, sys.stdin.readline().split())) # 자연수 M입력 받기 M = int(input()) # 정수 M개 입력 받기 arr2 = list(map(int, sys.stdin.readline().split())) # arr1 오름차순 정렬 arr1.sort() # arr2의 정수가 arr1에 존재하는지 출력하기 # 존재할 경우 1, 존재하지 않을 경우 0 출력 # 이분 탐색 for i in range(M): # 시작점 start = 0 # 끝점 e..
[항해99 1기] [Chapter2-2] 자료구조, 알고리즘 (16) (2021.3.18) 풀었던 문제들을 복습 01. 재귀함수 정의할 때 자기 자신을 참조하는 함수 Recursion 오류를 방지하기 위해서 빠져나가는 지점을 만들어야 한다. if문을 사용해서 특정 지점을 정해 return을 시켜준다. 호출될 때마다 메모리에 스택이 쌓인다. 예제: 하노이의 탑 # 디스크의 수 N = int(input()) # 디스크를 옮기는 재귀함수 # N: 디스크, s: 시작 장대, m: 중간 장대, e: 도착 장대 def moveDisk(N, s, m, e): # 옮길 디스크가 없을 때 if N == 0: return else: # N - 1 개의 디스크를 중간 장대로 옮긴다. moveDisk(N - 1, s, e, m) # 옮긴 디스크와 시작 장대, 도착 장대를 출력 print(N, s, e) # 중간 장..
[항해99 1기] [Chapter2-2] 자료구조, 알고리즘 (15) (2021.3.17) 알고리즘 문제를 풀면서 알게된 팁들 01. 시간초과가 발생할 때 코드 자체의 시간 복잡도 반복문을 너무 많이 사용한 것이 아닌지 체크 적절하지 않은 자료구조를 사용한 것이 아닌지 체크 예를 들어, pop(0)보다 popleft()가 더 빠르다. 빠르게 입력 받기를 시도해본다 # sys 라이브러리 import sys data = sys.stdin.readline().rstrip() 02. 오류가 발생할 때 디버깅 모드로 분석한다. 코드를 작성했을 때 나의 의도와 다른 변수의 변화 등을 체크 인덱스 오류 보통 for문에서 발생한다. 입력이 아주 짧은 경우 발생할 수도 있다. 메모이제이션으로 리스트의 일정 인덱스의 값을 선언해놓았을 때 발생 가능 자료형 오류 입력을 받았을 때 map 함수 처리를 안 했을 가능..
[항해99 1기] [Chapter2-2] 자료구조, 알고리즘 (14) (2021.3.16) Baekjoon Online Judge 백준 온라인 저지 사이트의 문제 풀이 2667 문제 링크 # 큐 자료형 사용하기위해 deque import from collections import deque # 지도의 크기 N = int(input()) # 지도 정보 입력 받기 M = [list(input()) for _ in range(N)] # 지도의 정보 정수형으로 변환 for i in range(N): M[i] = list(map(int, M[i])) # 방향 # 상, 하 dx = [-1, 0, 1, 0] # 좌, 우 dy = [0, -1, 0, 1] # 집 수를 카운트할 리스트 선언 cnt_list = [] # 카운트를 저장할 변수 선언 cnt = 0 # 깊이 우선 탐색으로 지도의 단지를 탐색 # M:..
[항해99 1기] [Chapter2-2] 자료구조, 알고리즘 (13) (2021.3.15) Baekjoon Online Judge 백준 온라인 저지 사이트의 문제 풀이 1260 문제 링크 # BFS를 사용하기위해 deque 가져오기 from collections import deque # N: 정점의 개수 , M: 간선의 개수, V: 탐색을 시작할 정점의 번호 N, M, V = map(int, input().split()) # 간선의 개수만큼 입력 받기 # 인접 리스트를 받을 리스트 선언 G = [[] for _ in range(N + 1)] # 입력받은 정보를 인접 리스트로 변환하기 for _ in range(M): a, b = map(int, input().split()) G[a].append(b) G[b].append(a) # 이차원 리스트의 각 리스트를 오름차순 정렬 for x in G..
[항해99 1기] [Chapter2-2] 자료구조, 알고리즘 (12) (2021.3.14) 01. 분할 정복 Divide and conquer 원래 문제를 성질이 똑같은 여러 개의 부분 문제로 나누어 원래 문제의 해를 구하는 방식 아래와 같은 절차를 거친다 Divide 2개 이상의 작은 문제들로 쪼갠다. Conquer 나누어진 작은 문제들을 푼다. Combine 나누어 해결한 문제들을 합친다. 02. 백트래킹 Backtracking 해답을 찾는 과정에서 해답이 될 가능성이 있는지를 확인한다. 해답이 될 가능성이 적으면 부모 노드로 돌아온다. 특정한 조건을 만족하는 경우만 살펴 본다. 단순 깊이 우선 탐색보다 효율이 증가 깊이 우선 탐색은 가능한 모든 경로를 탐색
REST API (2021.3.14) 01. API란? Application Programming Interface 사용자가 기능을 활용할 수 있도록 하는 제어장치 리모콘, 자판기의 버튼, 키보드와 마우스 기기와 인간의 소통창구 소프트웨어의 측면에서 제어 정보를 볼 수 있도록 하는 것 브라우저는 web API를 통해서 자바스크립트로부터 특정한 동작을 지시받는다. 윈도우는 개발자들이 시스템이나 하드웨어에 대한 세세한 지식 없이도 프로그램을 개발할 수 있다. 지정된 명령어로 윈도우에서 동작을 수행하도록 소프트웨어를 짤 수 있는 windows API를 제공한다. 02. REST API란? REST API란 HTTP 요청을 보낼 때 어떤 URI, method를 사용해야 할지 개발자 사이에 지켜지는 약속 기존의 SOAP 형식을 대체 각 요청이 어떤 ..
[항해99 1기] [Chapter2-2] 자료구조, 알고리즘 (11) (2021.3.13) Baekjoon Online Judge 백준 온라인 저지 사이트의 문제 풀이 9184 문제 링크 def w(a, b, c): # 메모에 전달받은 인자값들이 키로 있으면 그 값을 리턴 if (a, b, c) in memo.keys(): # memo 딕셔너리의 (a, b, c) 값 리턴 return memo[(a, b, c)] # 문제에서 제시된 조건을 이용하여 메모이제이션 if a 20: # 메모이제이션 memo[(20, 20, 20)] = w(20, 20, 20) return memo[(20, 20, 20)] elif a < b < c: # 메모이제이션 memo[(a, b, c)] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c) return memo[(a..