https://www.acmicpc.net/problem/2869알고리즘 분류수학문제땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B 출력 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.CodeA, B, V = map(int,input().split())print(-(-(V - A) // (A - B)) + 1)문제풀이A, B, V를 정수형으로 입력받..
Koala - 15기
https://www.acmicpc.net/problem/25602문제랑이 집사는 자신의 고양이 랑이와 메리 둘에게 매일 아침 캔을 정확히 하나씩 준다. 랑이 집사가 가진 캔의 종류는 N가지로, 집사는 i번째 캔을 A[i]개 갖고 있다. 랑이와 메리는 입맛이 까다롭고 변덕이 심해서 매일 각 캔에 대한 만족도가 다르다. i번째 날 랑이가 j번째 캔을 먹었을 때 만족도는 R[i][j], i번째 날 메리가 j번째 캔을 먹었을 때 만족도는 M[i][j]로 나타난다. 자연수 N과 A, R, M 배열이 주어질 때, 랑이 집사가 현재 가진 캔으로 K일동안 랑이와 메리에게 하루에 하나의 캔을 줘서 얻을 수 있는 만족도의 합의 최댓값을 구하는 프로그램을 작성하시오.입력 & 출력첫째 줄에 N, K가 주어진다. (1 ..
문제https://www.acmicpc.net/problem/4458문장을 읽은 뒤, 줄의 첫 글자를 대문자로 바꾸는 프로그램을 작성하시오.입력첫째 줄에 줄의 수 N이 주어진다. 다음 N개의 줄에는 문장이 주어진다. 각 문장에 들어있는 글자의 수는 30을 넘지 않는다. 모든 줄의 첫 번째 글자는 알파벳이다.출력각 줄의 첫글자를 대문자로 바꾼뒤 출력한다.풀이문장의 인덱싱과 슬라이싱, 대소문자 변환 메서드를 사용하겠습니다.문장을 입력 받아 첫번째 알파벳만 인덱싱으로 가져와 대문자로 출력 후, print함수의 end옵션을 이용하여 줄바꿈을 방지합니다.그 후 나머지 알파벳들을 슬라이싱으로 가져와 대문자로 출력된 첫 알파벳 뒤에 그대로 출력합니다.코드input1 = int(input())for i in range..
https://www.acmicpc.net/problem/9095문제정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.1+1+1+11+1+21+2+12+1+12+21+33+1정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. 소스코드def go(arr): global cnt if sum(arr) == n: cnt += 1 ..
https://www.acmicpc.net/problem/17094 문제 풀이1. 문자열 길이 입력 받기2. 문자열 입력 받기3. 'e'의 개수를 나타내는 변수 선언과 동시에 0으로 초기화4. '2'의 개수를 나타내는 변수 선언과 동시에 0으로 초기화5. 해당 문자열 길이만큼 2인지 e인지 구분하는 수행 반복6. 해당 문자열의 i 인덱스가 2인지 e인지 구별하여 그에 맞는 변수값 1 증가7. 모든 반복을 끝낸 후 2의 등장횟수와 e의 등장횟수를 비교하여 경우에 맞는 출력값 출력 문제 코드 n = int(input())s = input()cnte = 0cnt2 = 0for i in range(n): if s[i] == "2": cnt2 += 1 else: cnte += ..
문제 & 링크https://www.acmicpc.net/problem/1350 풀이1. vector를 사용하여 각 파일의 크기를 저장한다. 이때 각 파일의 크기는 1,000,000,000이고, 최대 50개의 파일이 주어질 수 있으므로, 최대 50,000,000,000의 저장 공간이 필요하다. 따라서 vector의 자료형을 long long으로 설정해야 한다.2. 클러스터의 크기를 저장한다.3. 각 파일의 크기를 클러스터의 크기로 나눈다. 이때 나머지가 없을 경우 해당 몫을 count에 더하고, 나머지가 있을 경우 (몫 + 1)을 count에 더한다.4. 모든 파일에 대해 3의 과정을 반복한 후 클러스터의 크기와 count의 값을 곱해주면 사용한 디스크 공간을 얻을 수 있다. 코드#include #incl..
문제 & 링크https://www.acmicpc.net/problem/11365 풀이1. string과 getline() 함수를 사용하여 줄 단위로 암호를 입력 받는다.2. algorithm 헤더 파일의 reverse()함수를 사용하여 암호를 뒤집어서 해독한다.3. 1 - 2의 과정을 반복문을 이용하여 실행하고, if문으로 "END"가 나올 때 까지 반복한다. 코드#include #include #include using namespace std;int main() { string egassem; while(1) { getline(cin, egassem); if (egassem == "END") break; reverse..
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번의 교환으로 문제를 해결합니다해당 풀이가 가능한 이유는 실제로 비정..