전체 글 19

[미분적분학] 기본 미분 공식 (합미분, 곱미분, 몫미분), 연쇄법칙, 편미분

기본 미분 공식아래의 조건이 만족할 때, 사용할 수 있는 기본 미분 공식은 다음과 같다. 두 함수 $ f(x) $, $ g(x) $가 미분 가능한 함수이고, $ \alpha , \beta  $가 상수이면,$ [\alpha f(x)\pm \beta g(x)]' = \alpha f'(x) \pm \beta g'(x) $ (합미분)$ [f(x)g(x)]' = f'(x)g(x) + f(x)g'(x) $ (곱미분)$ [\frac{f(x)}{g(x)}]' = \frac{f'(x)g(x) - f(x)g'(x)}{(g(x))^2} $ (몫미분)상수함수 $ f(x) = k $ 면, $ f'(x) = 0 $ 이다.$ f(x) = x^n $ (n이 실수)이면, $ f'(x) = nx^{n-1} $이다.연쇄법칙(Chain R..

[백준][Python] 11286 절댓값 힙 - 우선순위 큐(Priority Queue)

문제 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 설계 주어진 입력의 개수는 최대 100,000개이고, 주어진 시간은 1초이다. 따라서 이 문제는 최소 $ O(n \mathrm{log}n) $의 시간복잡도로 해결해야 한다. 입력을 하는 과정에서 n번의 연산을 하는 것은 어쩔 수 없으니, 저번과 같이 답을 구하는 과정에서 $O(1)$의 시간이 걸리는 큐나 덱을 사용해보자. 여기서 포인트는 데이터를 절댓값 순으로 정렬해야한..

알고리즘/백준 2024.03.25

[백준][Python] 11003 최솟값 찾기 - 덱(Deque)으로 정렬하기

문제 https://www.acmicpc.net/problem/11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net 설계 N개의 수가 주어지고, 숫자 L이 주어지며 주어진 $D_{i}$ 의 최솟값들을 출력하는 문제이다. 기본적인 구성은 위의 그림과 같다. L = 2일 때, $D_{i}$ 는 $A_{i-1}$ ~ $A_{i}$ 의 범위 중 최솟값이 되고, L = 3일 때, $D_{i}$ 는 $A_{i-2}$ ~ $A_{i}$ 의 범위 중 최솟값이 된다. 이를 알아보기 쉽게 표..

알고리즘/백준 2024.03.21

[자료구조][Python] 덱 (Deque)

덱 덱(Double Ended QUEue)는 앞서 이야기한 스택(Stack)과 큐(Queue)의 특성을 모두 가지고 있는 자료구조이다. 두 가지의 특성을 모두 가지고 있는 자료구조답게 덱의 앞과 뒤 모두에서 삽입과 삭제가 이루어진다. 또한 덱을 잘 이용하면 효율적으로 시간복잡도를 줄이거나, 정렬 효과를 얻을 수 있으니 잘 알아두도록 하자. 스택(Stack)과 큐(Queue)가 뭔지 잘 모르겠다면, 아래 게시글을 참고하자. https://pink-saurus.tistory.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0python-%EC%8A%A4%ED%83%9D-Stack [자료구조][Python] 스택 (Stack) 스택이란? 스택(Stack)은 후입선출(Last I..

[자료구조][Python] 큐 (Queue)

큐 큐(Queue)는 선입선출(First In First Out)의 규칙을 따르는 자료구조이다. 스택과 마찬가지로 리스트 자료구조의 연장형이며, 큐의 앞 부분에서 삭제가, 뒷 부분에서 삽입이 이루어진다. 큐의 import 와 연산 큐를 import 하는 주된 방법은 크게 두 가지가 존재한다. import 한 방식에 따라서 사용 가능한 함수에 약간의 차이가 있으니 주의하자. from queue import Queue from queue import Queue Q = Queue() print(type(Q)) # class - 큐에서의 삽입(put) Q.put(data): 큐에 data를 삽입한다. 이때, 삽입되는 data의 위치는 큐의 뒷 부분이다. - 큐에서의 삭제(get) Q.get(): 큐의 맨 앞 원..

[자료구조][Python] 스택 (Stack)

스택이란? 스택(Stack)은 후입선출(Last In First Out)의 규칙을 따르는 자료구조이다. 리스트 자료구조의 연장형이며, 가장 나중에 들어온 값(top)을 기준으로 삽입과 삭제와 같은 연산이 진행된다. 스택의 연산 스택의 연산은 삽입(append)과 삭제(pop)가 있다. - 스택에서의 삽입(append) S.append(data): 스택에 data를 삽입한다. 이때, 삽입되는 data의 위치는 스택의 가장 마지막 인덱스이다. - 스택에서의 삭제(pop) S.pop(): 스택의 top 인덱스의 원소를 스택에서 삭제한다. 이때, 삭제되는 원소가 리턴된다. 주의사항: top은 단순히 연산이 이루어지는 위치를 의미하며, 실질적인 원소값을 얻기 위해서는 S [-1]을 통해 얻어야 한다.

[Python] 파이썬 변수 값 바꾸기(swap)

예시 다음과 같이 각각의 값이 14, 28인 두 변수 a와 b가 있다. 여기서 a값이 28이 되고, b값이 14가 되게 하려면 어떻게 해야 할까? temp 변수 이용하기 temp 변수에 a의 값을 저장해놓고, a에 b값을 넣은 뒤, b에 temp 변수의 값을 넣어 저장해둔 a의 값을 넣는 방식이다. 튜플 형식으로 바꾸기 직관적이게 바로 바꿔준다. 엄청 간단하다.

언어/python 2023.11.04

[Python] join 함수 - 문자열 합치기

예시 다음과 같은 a 리스트가 있다. 우리는 이 리스트의 요소들을 합쳐 하나의 문자열로 만들려고 한다. 어떻게 해야할까? 연산자 '+' 이용하기 위와 같이 연산자 '+'를 사용해 합칠 수 있다. 그러나 이것보다 깔끔한 방법이 있다. join 함수 이용하기 와우 엄청 간단하다 그렇다면 join함수는 어떻게 사용하는지 살펴보자 join 함수 join함수를 사용하는 방법은 다음과 같이 두 가지로 나뉜다. "".join(문자열/리스트/튜플) "(구분자)".join(문자열/리스트/튜플) 두 번째 방법부터 살펴보자. 그렇다. join 함수는 반복가능한 객체의 요소들 사이에 구분자를 넣어준 결과를 문자열로 리턴해준다. 첫 번째 방법은 구분자에 아무것도 넣지 않았기 때문에 리스트의 요소가 다닥다닥 붙어 출력된 것이다...

언어/python 2023.10.03

[C/C++] if절에서의 float 자료형 비교 오류

문제발견 "BOJ 25206번: 너의 평점은" 문제를 풀다가 이상한 점을 발견했다. 25206번: 너의 평점은 인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치 www.acmicpc.net score_float[i] 값에 0.1의 값이 들어있음에도 불구하고 31번줄의 if절이 실행되지 않았다. 나와 같은 문제를 풀다가 여기까지 왔으면 몰라도 그렇지 않다면 문제를 읽고 코드를 이해하기는 너무 귀찮으므로 발생한 문제를 간략한 코드로 나타내면 다음과 같다. #include using namespace std; int main(){ float a = 0.1; if(a == 0.1..

코딩 팁 2023.06.08

[C/C++] 실수형 자료 소수점 지정해서 출력하기

개요 코딩을 하다보면 실수형 자료의 소수점을 지정해서 출력해야할 때가 있을 것이다. 오늘은 C와 C++에서 어떻게 소수점을 지정해서 출력을 하는지 알아보자. C #include int main(){ float a = 0.1234567; printf("%f\n" , a);// 그냥 출력할 때 printf("%.1lf\n" , a);// 소수점 1번째 자리까지 printf("%.2lf\n" , a);// 소수점 2번째 자리까지 printf("%.3lf\n" , a);// 소수점 3번째 자리까지 printf("%.7lf\n" , a);// 소수점 7번째 자리까지 printf("\n"); return 0; } printf("%.nlf", a) 형식에서 n에 출력하고자하는 소수점의 자릿수를 넣어주면 된다. (참고..

코딩 팁 2023.06.08