#문제정보 출처 : www.acmicpc.net/problem/1744 난이도 : 골드4 분류 : 그리디(GREEDY) 알고리즘 #문제분석 입력받은 수들을 양수,음수,0 으로 각각 다른 벡터에 저장해서 풀이했습니다. vector pos; // 양수 벡터 vector neg; // 음수 벡터 vector zero; // 0 저장 벡터 vector res; // 출력 값 CASE1 : 양수벡터 양수가 홀수개인 경우 : 가장 작은 값을 결과값에 더합니다. 양수가 짝수개인 경우 : 양수벡터를 오름차 정렬한 후 , 뒤에서 부터 2개씩 묶어 곱한 뒤 결과값에 더합니다. (내림차 정렬한 후 앞에서 부터 2개씩 곱해도 상관은 없습니다.) // positive int pSize = pos.size(); if (pSize..
#문제정보 출처 : www.acmicpc.net/problem/15903 #문제분석 알고리즘 분류 : 그리디(GREEDY) 그냥 충실히 더해주기만 하면 되는 간단한 그리디 문제이다. while (m--) { sort(card.begin(), card.end()); temp = card[0] + card[1]; card[0] = card[1] = temp; } 입력받은 m(합체 횟수) 만큼 반복을 돌려서 , sort로 오름차 정렬을 해준 뒤 문제에서 제시한 조건에 맞게 더한다. 자료형만 조심하면 딱히 어려운 부분은 없는 문제였다. #소스코드 #include #include #include using namespace std; typedef long long ll; ll result; int main() {..
#문제정보 출처 : www.acmicpc.net/problem/1783 #문제분석 사용된 알고리즘 : 그리디(GREEDY) 다음 문제는 세로가 1 , 2 혹은 3 이상인 케이스로 나누어 생각해야 한다. CASE 1 : 세로가 1인 경우 문제에서 제시한 1,2,3,4 이동방식 모두 사용 불가능하다. 따라서, 어느 방향으로도 이동이 불가능하므로 1칸이다. (병든 나이트가 처음에 위치한 영역도 여행한 것으로 취급한다.) CASE 2 : 세로가 2인 경우 2,3 이동방식을 통해 여행이 가능하기에, (M-1)/2 + 1(처음 나이트 위치) 만큼 이동이 가능하다.단, 문제 조건 "이동 횟수가 4번 이상인 경우에는 모든 이동 방법을 각각 한 번 이상 이용해야 한다." 를 지켜야 하기에, 최대 이동 횟수는 3 + 1 ..
#문제정보 출처 : www.acmicpc.net/problem/11501 #문제분석 사용된 알고리즘 : 그리디(GREEDY) stock(주식을 저장하는 벡터)를 뒤에서 부터 차례로 검사하여, 최댓값을 갱신하며 차이 만큼 빼주어 결과값에 더하는 그리디 방식으로 풀이했다. [1 1 3 1 2] 를 예시로 설명하도록 하겠다. 1번째 비교 5번째 인덱스 [2] 와 mx [-1] (mx는 미리 -1로 초기화 해둔다.) 을 비교한다.2 > -1 이므로 mx의 값을 2로 변경한다.mx = 2 , result = 0 2번째 비교 4번째 인덱스 [1] 과 mx[2]를 비교한다. 1 < mx[2] 이므로, mx[2]와 1의 차이인 1만큼을 result 변수에 더해준다. mx = 2 , result = 1 3번째 비교 3번..
#문제정보 출처 : www.acmicpc.net/problem/1439 #문제분석 사용된 알고리즘 : 그리디(GREEDY) 간단한 문제이다. 0이 나오는 영역과 1이 나오는 영역을 비교하여, 더 작은 영역을 출력하면 된다. 0001100이 입력되었다고 가정해 보면 0의 영역 = 2 , 1의 영역 = 1 이므로 1의 영역을 출력한다. 01001100이 입력되었다고 가정해 보면 0의 영역 = 3 , 1의 영역 = 2 이므로 1의 영역을 출력한다. 단, 조심해야 할 부분은 if (numstr[i] != numstr[i+1]) { if (numstr[i] == '0') zeroarea++; else onearea++; } if (문자열[i] != 문자열[i+1]) 조건문 부분인데, i번째 인덱스와 i+1번째 인..