목록알고리즘/코테 문제 (171)
컴굥일지
문제 https://www.acmicpc.net/problem/2847 문제 내용 각 레벨에서 얻을 수 있는 점수를 오름차순으로 만들어야 한다. 즉, 최고점을 기준으로 각 단계를 몇 번 감소시켜야 할지를 계산하면 된다. 항상 답이 존재하는 경우만 입력으로 주어진다고 되어있으므로, 점수를 감소시키다가 음수가 되는 일은 발생하지 않는다. 문제 풀이 그렇게 어려운 문제는 아니다. 배열을 뒤에서부터 반복문을 돌면서 i번째 값과 i-1의 값을 비교하면 된다. 조건문을 통해 i번째 값이 큰 경우는 별다른 처리 없이 넘어가면 된다. i번째 값이 작은 경우 i-1번째 값과 i번째 값이 적어도 1은 차이가 나야 하기 때문에 (두 값의 차이 -1)를 구하여 계산하면 된다. 코드 #include #include #inclu..
문제 https://www.acmicpc.net/problem/2839 문제 내용 Nkg의 설탕을 3kg 또는 5kg 봉지로 나누어 담아야 한다. 이때, 정확하게 Nkg을 만들면서 봉지의 개수를 최소화하는 것이 목표이다. 문제 풀이 Greedy를 사용하여 문제를 풀었다. 설탕이 15kg가 있다면 3kg 5봉지와 5kg 3봉지로 채울 수 있다. 이 경우, 5kg 3봉지로 채우는 것이 정답이다. 즉, 5로 나눌 수 있다면 5kg을 사용하고, 그렇지 않다면 3kg을 사용하면 된다. 코드 #include using namespace std; int n, cnt; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 cin >> n; /..
문제 https://www.acmicpc.net/problem/1931 문제 내용 회의의 시작시간과 종료시간을 입력 받아서, 회의실을 최대로 사용할 수 있는 회의의 개수를 출력하는 문제이다. 문제 풀이 Greedy를 사용하여 문제를 풀었다. 문제를 보고 떠올릴 수 있는 선택은 3가지 정도 있었다. 회의 시작 시간이 빠른 순서 / 회의 시간이 짧은 순서 / 회의가 빨리 끝나는 순서 각각의 경우에 대해 설명해보자면 1) 회의 시작 시간이 빠른 순서의 경우 - 회의를 아무리 빨리 시작해도 회의시간 자체가 길면 그 사이에 회의들이 여러개 들어가지 못하게 된다. 2) 회의 시간이 짧은 순서 - 회의 시간이 짧은 순서대로 먼저 집어넣다보면, 아래와 같은 경우가 생긴다. 3) 회의가 빨리 끝나는 순서 - 회의가 빨리..
백준 2346 풍선 터뜨리기 문제 링크 https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 첫째 줄에 자연수 N(1≤N≤1,000)이 주어진다. 다음 줄에는 차례로 각 풍선 안의 종이에 적혀 있는 수가 주어진다. 편의상 0은 적혀있지 않다고 가정하자. www.acmicpc.net 문제 내용 N개의 풍선이 있고, 풍선 안의 수가 적혀있다. 풍선은 1번부터 터뜨리며, 터뜨린 풍선 안에 적혀있는 수만큼 이동하여 풍선을 또 터뜨린다. 단, 움직일 땐 터뜨린 풍선은 제외하고 생각한다. 문제 풀이 코드 #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); c..
백준 9093 단어 뒤집기 문제 링크 https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 www.acmicpc.net 문제 내용 문장을 입력받아, 각각의 단어를 뒤집어 출력하면 된다. 문제 풀이 getline()을 이용해서 '\n'이 나올 때까지 입력받고, 그 후에 처리를 한다. 공백이 나올 때까지 문자를 스택에 넣고, 공백이 들어오면 스택에 있는 것을 하나씩 꺼내서 출력하면 된다. 코드 #include #include #include using namespace st..
백준 2993 세부분 문제 링크 https://www.acmicpc.net/problem/2993 2993번: 세 부분 첫째 줄에 원섭이가 고른 단어가 주어진다. 고른 단어는 알파벳 소문자로 이루어져 있고, 길이는 3보다 크거나 같고, 50보다 작거나 같다. www.acmicpc.net 문제 내용 입력받은 문자열을 세 부분으로 나누어 뒤집고, 나누기 전과 같은 순서로 합친다. 이때 사전 순으로 가장 앞서는 단어를 출력한다. 문제 풀이 for문을 2번 돌려서 문자열을 3개의 토막으로 나눈다. 그리고 각각을 뒤집고, 이전과 비교하여 더 앞서는 단어를 ans에 저장한다. 코드 #include #include #include using namespace std; int main() { ios::sync_with..
백준 1008 A/D 문제 링크 https://www.acmicpc.net/problem/1008 1008번: A/B 두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 내용 두 정수 A,B를 입력받아서, A/B의 값을 출력하면 된다. 이때 정답과 출력값의 오차가 10^-9이하여야 한다. 문제 풀이 C++에서 출력하는 방법으로, 출력 전에, cout.precision(n);을 이용하는 방법이 있다. 이때 n은 유효숫자를 나타낸다. 코드 #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); double first, se..
백준 1547 공 문제 링크 https://www.acmicpc.net/problem/1547 1547번: 공 첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것 www.acmicpc.net 문제 내용 컵 1,2,3이 있고, 공의 위치는 초기 1번 컵의 위치이다. 입력받은 숫자는 컵의 "번호" 이므로, 해당 번호의 컵을 찾아 위치를 바꿔주면 된다. 코드 #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int m; cin..
백준 1158 요세푸스 문제 문제 링크 https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제 내용 1~N명의 사람이 원형으로 앉아있고, 순서대로 K번째 사람을 제거한다. 연속적으로 제거하기 위해 vector를 사용했다. 코드 #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, k; cin >> n >> k; //입력 vectorv(n); for (int i = 0; i < n;..
백준 10804 카드 역배치 문제 링크 https://www.acmicpc.net/problem/10804 10804번: 카드 역배치 1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다. www.acmicpc.net 문제 내용 1~20까지의 카드 배열을 선언하고, 10개의 구간을 입력받는다. 입력받은 구간을 뒤집는 작업을 하고, 마지막 결과를 출력한다. 1. 맨 처음에는 swap() 함수를 사용하는 방법을 생각했었다. 그렇기 때문에, 입력된 구간마다 (second-first)/2의 횟수만큼 반복문을 돌려주는 방식의 코드를 작성했다. (주석 부분)2. 좀 더 짧게 작성하는 방법으로 reverse() 함수를..