문자열 처리하는 문제이다. 처음엔 시간초과 났는데, 단순하게 이중 for문으로 '듣도못한'에 해당하는 문자열과 입력받은 문자열을 비교하여 벡터에 저장하고, 그 벡터를 소팅하여 출력했다 (...) 하지만...이 문제는 매우 간단하다 일단 이 문제는 2개 (듣도못한 / 보도못한)의 겹침 밖에 존재하지 않는다는 것이 핵심이다. 즉 한 문자열이 나올 수 있는 최대의 경우는 두번이다. 즉, 받은 모든 문자열을 소팅하면 당연히 중복된 문자열 두개는 문자열 내에서 바로 이웃해있게 된다. 이를 이용해서 풀면된다. 1) n+m 만큼 문자열 입력을 받는다 2)벡터를 소팅한다. 3)소팅한 벡터에서 v1.at(i-1) == v1.at(i) 라면 v2에 해당 문자열을 넣어준다. #include #include #include ..
이 문제는 설탕배달보다 더 간단한 그리디 문제이다. 왜냐하면 이 문제는, "만약 해당 값이 조건을 충족 못 시킬 시, 돌아와서 - 한다 " 라는게 없다. 처음 풀었을 때는 동전 값 받으면서, k보다 작거나 같으면서 가장 큰 값을 구해서 k/max , k%max로 하고, 그 후 다시 배열을 돌면서 while문으로 동전 개수를 증가시키고, k값을 감소시켰다. (복잡..) 처음 제출한 알고리즘은 이러하다. #include using namespace std; int main(void) { int n, k; cin >> n; cin >> k; int coin[10]; int max=0; //max와 max인덱스를 구한다 int index = 0; for (int i = 0; i >..
#include using namespace std; int solve(int n) { int sum = 0; int min = 0; if (n == 4 || n == 7) return -1; while (1) { while (sum n) { sum -= 5; min--;} //만약 넘었다면 5kg을 빼준다. while (sum > N; cout 자루의 무게가 N과 같다면 ->종료 2)자루의 무게가 N보다 크다면 -> 자루의 무게가 N보다 작거나 같아질 때 까지 자루에서 5kg를 뺀다. 3)자루의 무게가 N보다 작거나 같을 때 까지 3kg를 추가한다. -> 자루의 뭬가 N과 같다면 -> 종료 -> 자루의 무게가 N보다 커지게 되었다면 앞에서부터 다시시작