Koala - 15기

https://www.acmicpc.net/problem/9012문제문제풀이괄호 문자열을 입력받아 문자 하나 하나를 리스트의 원소로 저장합니다. 반복문을 통하여 리스트의 원소를 탐색하다가 '('이 나오고 ')'이 나온 경우에는 리스트에서 소괄호 '('와 ')'를 삭제합니다. 이 과정을 재귀함수를 통하여 게속 반복한 후에, 만약 리스트가 빈 원소가 되었으면  문자열이 VPS를 성립하는 경우입니다. 소스코드# functiondef function(s): if len(s) == 0: return fl = len(s) for i in range(len(s)-1): if s[i] + s[i+1] == '()': s.pop(i); s.pop(i)..
풀이#include #define MAX 1000001 #define MOD 1000000009 int n; long long d[MAX]; using namespace std; int main(){     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     int T;     cin >> T;     d[1] = 1, d[2] = 2, d[3] = 4;     while(T--) {         cin >> n;         for( int j = 4; j             d[j] = (d[j - 3] + d[j - 2] + d[j - 1]) % MOD;         }         cout     }  ..
문제 링크https://www.acmicpc.net/problem/2561문제 난이도다이아몬드 5문제 설명주어진 순열을 정렬된 상태로 만들기 위해서 3번 이하의 교환으로 가능한지를 판별하는 문제입니다. 교환은 연속된 수열을 뒤집는 방식으로 이루어집니다. 주어진 순열을 가능한 한 적은 횟수로 정렬된 상태로 만들어야 합니다.문제 풀이아이디어이 문제를 해결하기 위해 다음과 같은 접근 방식을 사용합니다:비정상 구간 확인: 순열에서 연속된 숫자 간의 차이가 1보다 큰 부분과 단조증가 또는 단조감소가 아닌 부분을 확인합니다.비정상 구간 뒤집기: 비정상 구간을 뒤집어서 순열을 정렬된 상태로 만드는 방법을 찾습니다.백트래킹: 백트래킹을 이용해 최대 3번의 교환으로 문제를 해결합니다해당 풀이가 가능한 이유는 실제로 비정..
https://www.acmicpc.net/problem/15917문제 풀이input = __import__('sys').stdin.readlineq = int(input())while q: a = int(input()) while a>1: if a % 2: a=0 a//=2 print(a) q-=11. 빠른 입력을 받아오기 위해 'sys'의 stdin.readline으로 input을 설정한다.2. 쿼리 a를 읽어온다.3. a==1이면 print(a)로 1을 출력한다.4. a>1이면 a가 홀수인지 체크해가면서 2로 나눠준다.5. a가 홀수라면 a=0으로 초기화 한 후 print(a)로 0을 출력한다.6. a를 2로 나누는 것을 반복하여 ..
https://www.acmicpc.net/problem/17951 이진탐색을 이용해서 그룹 당 문제개수의 합의 최소를 구하는 문제이진탐색을 사용해서 푸는 것이란 것을 몰르고 풀었다면, 이걸 이진탐색을 사용하겠다는 생각이 들었을까 .. 싶었던 문제였다. import java.io.*;import java.util.*;public class Main { static int arr[]; static int N; static int M; public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); ..
https://www.acmicpc.net/problem/2529   문제 풀이import sysimport itertoolsdef check(array, ptr): global n for i in range(n): if array[i] == '>' and not ptr[i] > ptr[i + 1]: return False elif array[i] == ' 모든 조합의 경우를 check라는 검증 함수를 통해 필요한 부분만 값을 받아올 수 있도록 작성했다. 역순 순열을 통해 모든 순회를 통해 검증하는 것이 아닌 Max 값과 min 값을 각각 따로 받아 값을 받아 최적화를 진행했다.
문제 https://www.acmicpc.net/problem/17127  Algorithm 구간을 총 4개를 나누어야 하므로 for문을 3개 사용하여 구간을 나누었다. 위 그림과 같이 for문으로 구간을 나누어 주었다. 최소한 그룹에는 1개의 나무가 존재해야 하므로 구간을 0~n-1로 설정하고 i는 j,k를 고려하여 0~n-3까지, j는 k를 고려하여 1자리를 남겨야 하므로 i+1부터 n-2까지, k는 j+1부터 n-1까지 설정해준다.이제 구간끼리의 곱을 구해야 한다. 우리가 설정한 i,j,k에 따라 구간은 [0,i] , [i+1,j] , [j+1,k] , [k+1,n-1]의 구간이다.여기서 누적합의 개념을 사용해서 누적합이아닌 누적곱으로 바꾸어 주었다. prefix[0] = 1로 설정하고 계속 곱하고..
KauKoala
'Koala - 15기' 카테고리의 글 목록