Algorithm 38

[APS] 4. stack (스택) 과 DP (동적계획)

1. 스택의 특징선형구조를 갖는다. (자료간의 관계가 1:1이다.)마지막에 삽입한 자료를 가장 먼저 꺼낸다. (LIFO:Last-In-First-Out)자료구조 : 자료를 선형으로 저장할 저장소배열을 사용할 수 있다.스택에서 마지막 삽입된 원소의 위치를 top이라고 부른다. 혹은 stack pointercf ) 1차원 배열을 사용하여 구현할 경우, 구현이 용이하지만 스택의 크기를 변경하기 어렵다는 단점이 있다. → 저장소를 동적으로 할당하여 구현하는 방법이 있다. (복잡하지만 메모리를 효율적으로 사용) 스택의 활용 : 괄호검사, function call 2. 재귀호출function call을 생각해보자. 예를 들어def f(n): if n > 5: return else: print(f"{n} in") f..

Algorithm/APS 2022.08.19

[APS] 3. 정수론 (최대공약수, 최소공배수, 소수)

1. 최소공배수, 최대공약수, 소수최대공약수를 구하는 방법💡유클리드 호제법2개의 자연수 a, b(a>b)에 대해서 a % b = r 일 때, a와 b의 최대공약수는 b와 r의 최대공약수와 같다.이 과정을 반복해서 나머지가 0이 되었을 때, 이 때 나누는 수가 a 와 b의 최대 공약수 이다.# 공통인 약수 중 가장 큰 수 (GCD) # gcd : greatest common divisor # a > b def gcd(a,b) : r = 0 # 나머지 # a를 나누어 떨어질 때까지 나눈다. while b != 0: r = a % b a = b b = r return a 2. 최소공배수를 구하는 방법# 두 수에 서로 공통으로 존재하는 배수 중 제일 작은 수 # 최소 공배수의 성질 # 두 수 a,b의 최소공배수..

Algorithm/APS 2022.08.19

[APS] 2. 문자열의 패턴매칭 (그리디, 카프-라빈, KMP, 보이어-무어)

패턴매칭 1️⃣고지식한 패턴 검색 알고리즘 (Brute Force)def search_in_text(s, p): n = len(s) m = len(p) i = 0 j = 0 while i < n and j < m: if s[i] != p[j]: i = i - j j = -1 j = j+ 1 i = i + 1 if j == m: # 검색에 성공했을 때 index 반환 return i-m else : # 검색에 실패했을 때 -1 반환 return -1 s = "This is a book!" p = "is" print(search_in_text(s,p)) # 22️⃣ 카프-라빈 알고리즘3️⃣ KMP 알고리즘kmp 알고리즘은 텍스트에서 패턴을 찾을 때 주로 쓰이는데, 특히 패턴에서 반복되는 부분이 있을 경우, ..

Algorithm/APS 2022.08.19

[APS] 1. 문자열(String)

1. 컴퓨터에서의 문자표현컴퓨터에서 문자 ‘A’는 어떻게 메모리에 저장할까?네트워크가 발전되기 전, 미국에서는 각 지역 별로 코드체계를 정해놓고 사용했지만, 네트워크의 발전 이후 서로간 정보를 주고 받을 때 정보를 달리 해석한다는 문제가 생겼다. → 이러한 목적으로 ASCII (American Standard Code for Information Interchange)라는 문자 인코딩 표준이 제정되었다. 표준 아스키 코드 vs 확장 아스키코드표준 아스키 코드확장 아스키 코드사용 비트7bit7bit표현가능표준 문자표준 문자, 악센트 문자, 도형 문자, 특수 문자, 특수 기호 … 등 128개교환서로 다른 프로그램이나 컴퓨터 사이에 교환 가능교환 불가마이크로컴퓨터 하드웨어 및 소프트웨어 사이에서 세계적으로 통..

Algorithm/APS 2022.08.13

백준(BOJ) # 7568 덩치 python

문제 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼..

Algorithm/BOJ 2022.08.07

백준(BOJ) #2839 설탕배달

문제상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)출력상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로..

Algorithm/BOJ 2022.07.27

백준(BOJ) #2675 문자열 반복

문제문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.입력첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.출력각 테스트 케이스에 대해 P를 출력한다.예제 입력 1 예제 출력 1나의 코..

Algorithm/BOJ 2022.07.27

백준(BOJ) #2869 달팽이는 올라가고 싶다

문제땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.입력첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)출력첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다. 예제 입력 1 예제 출력 12 1 5 4 예제 입력 2 예제 출력 25 1 6 2 예제 입력 3 예제 출력 3100 99 1000000000 999999901 맨날 브론즈만 풀다가 실버는 어떤 맛일까? 궁금..

Algorithm/BOJ 2022.07.27