코드 # 복습 횟수:0, 01:00:00, 복습필요:*** from collections import deque def solution(picks, minerals): answer = 0 mineral_list = [] tool_num = sum(picks) minerals = minerals[:5*tool_num] tmp = [] for idx, mineral in enumerate(minerals): tmp.append(mineral) if idx % 5 == 4: mineral_list.append(tmp) tmp = [] else: pass if len(tmp) != 0: mineral_list.append(tmp) indexed_list = [] for mineral in mineral_list..
Koala - 11기/코딩테스트 준비 스터디
Problem Solution 먼저 수열 A의 크기를 입력 받고 for문을 활용해 수열 A의 원소들을 입력 받는다 dp 배열을 모두 1로 초기화한다. 0부터 i-1까지 순회하면서 arr[i] 보다 작은 원소들을 찾고, 작은 원소 arr[j]를 찾으면 dp[i]와 dp[j]+1 중 큰 값을 dp[i]에 저장한다. 마지막으로 dp배열 중 가장 큰 값을 찾아 result에 저장한 후 출력한다. Answer #include #include using namespace std; int arr[1001]; int dp[1001]; int main() { int n; cin >> n; for (int i = 0; i > arr[i]; } for (int i = 0; i < n; i++)..
문제 https://www.acmicpc.net/problem/25214 25214번: 크림 파스타 각 \(A_i\)가 추가된 직후의 문제의 답 \(N\)개를 공백으로 구분하여 출력한다. www.acmicpc.net Algorithm 1 ≤ i ≤ j ≤ len(A)을 만족하는 A[j] - A[i]의 최댓값을 구하는 문제이다. dp배열을 만들어주고, 각 배열의 첫번째 원소는 i-1까지의 최댓값과 A[i] 와 dp[i-1]까지의 최솟값의 차이중 최댓값을 취한다.각 배열의 두번째 원소는 dp[i-1] 과 A[i]의 최솟값을 취해주고 dp배열을 점점 확장해나가면 된다. 최종 출력은 첫번째원소를 출력해주면 된다. Code input = __import__('sys').stdin.readline n = int(i..
1463번: 1로 만들기 (acmicpc.net) 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 설명: 세 가지 연산을 적절히 사용해서 1을 만드는 문제. 최소한의 연산을 원함. 문제 코드: x=int(input()) dic={1:0,2:1,3:1} def fib(x): if x in list(dic.keys()): return dic[x] if x%6==0: dic[x]=min(fib(x//3),fib(x//2))+1 elif x%3==0: dic[x]=min(fib(x//3),fib(x-1))+1 elif x%2==0: dic[x]=min(fib(x//2),fib(x-1))+1 else: dic[x]=fib(x-..
문제 https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 코드 n=int(input()) sums=0 d=[] for i in range(n): d.append(list(map(int,input().split()))) for i in range(1,n): d[i][0]=min(d[i-1][1],d[i-1][2])+d[i][0] d[i][1]=min(d[i-1][0],d[i-1][2])+d[i][1] d[i][2]=min(d[i..
규칙 - 문제 인증, 블로그 포스팅, 모의테스트 참여를 하지 않을시 각각 활동비에서 -1000원씩 차감 - 학회 활동이 끝난 후, 스터디 우수 참여자에게 차감된 활동비를 N분의 1로 나눠서 지급 - 스터디 우수 참여자 기준은 남은 활동비의 내림차순으로 정렬하여 가장 높은 참여자들로 선정 강지완 - o773h 김규현 - bsghk38 김남수 - otherwedn 김도욱 - kduk 김재혁 - 김태우 - rereers1125 노유림 - elice100479 노현우 - 박창현 - begojara99 양지원 - moonlight0815 윤여빈 - 유완규 - beans3142 윤소윤 - soyoon602 이승헌 - lsheon0927 이유경 - nunomi0 이은주 - leunju217 정성주 - koreatst..
1. 문제 https://www.acmicpc.net/problem/15656 15656번: N과 M (7) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 2. 코드 n,m = map(int,input().split()) nums = list(map(int,input().split())) nums.sort() ans = [] def back(): if len(ans) == m: print(" ".join(map(str,ans))) return for i in range(n): ans.append(nums[i]) back() ans..
문제 https://www.acmicpc.net/problem/1476 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 문제 코드 ax,bx,cx,cnt=1,1,1,1 a,b,c=map(int,input().split()) while True: if a==ax and b==bx and c==cx: break ax+=1 bx+=1 cx+=1 cnt+=1 if ax>=16: ax-=15 if bx>=29: bx-=28 if cx>=20: cx-=19 print(cnt) 문제 풀이 브루트포스 문제이다. a,b,c에 입력..
문제 출처 : https://www.acmicpc.net/problem/1411 [1411번: 비슷한 단어 첫째 줄에 단어의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 한 줄에 하나씩 단어가 주어진다. 단어의 길이는 최대 50이고, N은 100보다 작거나 같은 자연수이다. 모든 단어의 길이는 같고, 중복 www.acmicpc.net](https://www.acmicpc.net/problem/1411) 문제 만약 어떤 단어A를 숌스럽게 바꿔서 또다른 단어 B로 만든다면, 그 단어는 비슷한 단어라고 한다. 어떤 단어를 숌스럽게 바꾼다는 말은 단어 A에 등장하는 모든 알파벳을 다른 알파벳으로 바꾼다는 소리다. 그리고, 단어에 등장하는 알파벳의 순서는 바뀌지 않는다. 두 개의 다른 알파벳을 하나의 알파벳으로..
문제풀이 숫자 하나에 대응하는 판별을 위해 bool 타입 함수를 만든다. 함수는 단순히 3자리수이고 각자리수의 간격이 같은지 확인하면 되는 단순한 함수이다. 이떄 두자리수는 간격이 하나이기 때문에 한수라고 볼 수 있다. 존재하는 모든 수에 대하여 함수를 수행하며 함수는 각 자리수를 비교하는 수행을 하여 O(n) 복잡도(함수 내부 복잡도 약 O(3) 정수배 관용 )를 가진다. #include using namespace std; bool GAB(int A){ int num[3]; if(A < 100) return true; //두자리 수라면 간격이 하나이기때문에 한수이다. for(int i = 0 ; i < 3 ; i++){ num[i] = A % 10; A /= 10; } if( num[2]-num[1]..
문제링크 https://www.acmicpc.net/problem/2661 2661번: 좋은수열 첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다. www.acmicpc.net 코드 import sys n = int(input()) result = [] def isgood(arr): for i in range(1,len(arr)//2+1): if arr[-i:]==arr[-i*2:-i]:return False return True def dfs(): global result if len(result)==n: print(''.join(map(str,result))) sys.e..
풀이 백트래킹 문제이다. 먼저 입력값으로 주어지는 배열의 크기 N과 부분수열의 합 S를 입력는다. 배열 arr[20]에 N개의 원소를 입력받는다. 재귀 함수 dfs를 구현합니다. 이 함수는 현재 인덱스(idx)와 현재까지의 합(sum)을 인자로 받는다. 재귀 함수 dfs의 동작은 다음과 같다: 현재 인덱스의 원소를 합에 더해줍니다: sum += arr[idx]; 만약 합이 S와 같다면, 카운트를 증가시킵니다: if (sum == S) { cnt++; } 현재 인덱스의 다음 원소부터 탐색하기 위해 for문을 사용하여 재귀 호출합니다: for (int i = idx + 1; i < N; i++) { dfs(i, sum); } 모든 원소에 대해 dfs를 호출하여 부분수열의 합이 S와 같은 경우의 수를 구한다...