시간복잡도(9)
-
자료구조 (4) ADTs Unsorted List and Sorted List
ADTs Unsorted List and Sorted List 자료구조 멤버변수와 멤버함수로 나눠서 내부적으로 특정한 연산을 통해 어떤 특성을 유지할 수 있도록 하는 것 1. 추상화 자료형 1) ADT 개념 - 구현과의 의존성이 없이 데이터의 특징을 정의하는것이다. - 슈도코드와 같이 문법적인 제한이 없이 흐름도를 통해 표현할 수 있다. - 데이터의 특징: 영역과 연산 2) 데이터의 세가지 레벨 응용 레벨 -> 논리 레벨 -> 구현 레벨 (1) 응용 레벨: 실생활에서 사용할 수 있는 자료의 레벨, 정보가 모여있는 곳 (2) 논리 레벨: 자료의 범위와 연산의 추상적인 관점 (3) 구현 레벨: 자료를 저장하기 위한 구조의 표현명세 및 연산을 위한 코딩 3) ADT 연산자 - 객체를 표현하기 위한 방법론이기에..
2022.03.17 -
백준 온라인 저지, 구현/12100번: 2048(easy)(파이썬 / 백준 골드문제)
문제 https://www.acmicpc.net/problem/12100 문제 정의 2048 게임은 4×4 크기의 보드에서 혼자 즐기는 재미있는 게임이다. 이 링크를 누르면 게임을 해볼 수 있다. 이 게임에서 한 번의 이동은 보드 위에 있는 전체 블록을 상하좌우 네 방향 중 하나로 이동시키는 것이다. 이때, 같은 값을 갖는 두 블록이 충돌하면 두 블록은 하나로 합쳐지게 된다. 한 번의 이동에서 이미 합쳐진 블록은 또 다른 블록과 다시 합쳐질 수 없다. (실제 게임에서는 이동을 한 번 할 때마다 블록이 추가되지만, 이 문제에서 블록이 추가되는 경우는 없다) 이 문제에서 다루는 2048 게임은 보드의 크기가 N×N 이다. 보드의 크기와 보드판의 블록 상태가 주어졌을 때, 최대 5번 이동해서 만들 수 있는 가..
2021.07.20 -
백준 온라인 저지, 이진 탐색/13423번: Three Dots(파이썬)
문제 https://www.acmicpc.net/problem/13423 문제 정의 직선 위에 서로 다른 N개의 점이 찍혀 있다. 점 i의 위치는 Xi이다. N개의 점 중 3개를 골라 가장 왼쪽에 있는 점을 a, 가운데 있는 점을 b, 가장 오른쪽에 있는 점을 c라고 하자. 각각의 점의 위치는 Xa, Xb, Xc이다. 이때 점 a, b 사이의 거리와 점 b, c사이의 거리가 같으면 세 점의 간격이 같다고 한다. 즉, Xb - Xa = Xc – Xb일 때 세 점의 간격이 같다. 다음은 N = 5인 경우의 예시이다. 위 예시에서 점의 위치는 각각 -4, -1, 0, 2, 4이다. 이중 -4, -1, 0위치의 세 점을 각각 a, b, c라고 하면 Xb - Xa = 3, Xc – Xb = 1로 간격이 같지 않다..
2021.07.16 -
다이나믹 프로그래밍 개념 정리(탑다운(메모이제이션)/ 바텀업 시간복잡도 / 파이썬 구현)
다이나믹 프로그래밍 강의 내용 : https://www.youtube.com/watch?v=5Lu34WIx2Us 1. 개념 - 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법 - 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 한다. - 다이나믹 프로그래밍의 구현은 일반적으로 두 가지 방식(탑 다운과 바텀 업)으로 구성된다. - 동적 계획법이라고도 부른다. - 점화식을 사용해 문제를 해결한다. * 점화식: 인접한 항들 사이의 관계식 * 점화식은 프로그래밍에서 재귀함수를 사용하면 구할 수 있다. * 수열은 배열이나 리스트를 이용해 표현할 수 있다. cf) 일반적인 프로그래밍 분야에서 동적이라고 이야기하는 것과는 약간 차이가 있다. ex) 자료구조에..
2021.07.09 -
백준 온라인 저널, 이진 탐색/10815번 : 숫자 카드(파이썬)
문제 https://www.acmicpc.net/problem/10815 문제 정의 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌..
2021.06.30 -
이진 탐색 개념 정리(이진 탐색 / 시간복잡도 / 파이썬 구현)
이진 탐색 강의 : https://www.youtube.com/watch?v=94RC-DsGMLo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=5 탐색의 개념 - 특정한 데이터를 찾기 위해 데이터를 찾는 과정 탐색의 종류 - 순차 탐색과 이진 탐색 순차 탐색 - 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 - 시간복잡도 : O(N^2) 이진 탐색 - 정렬되어있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 - 이진 탐색은 시작점, 끝점, 중간점을 이용하여 탐색 범위를 설정한다. - 시간복잡도 : O(LogN) 이진탐색의 구현 방법 0. 이진 탐색을 하기 이전 리스트를 정렬한다. 1. 시작점(0), 끝점(9),..
2021.06.24