728x90
0. [c++] 백준 - |
https://www.acmicpc.net/problem/1024
1. 풀이 |
1) 뭐, 이번 문제는 문제의 조건을 생각의 흐름대로 코딩하여 만들어보았다.
설명은 아래 코드에 포함시켰으므로 읽어보면 이해가 갈 것이라고 생각된다.
2) count를 i로 나눠주는 것이 얼마나 효율적인 것이였는지 보여주기 위해서 코드를 올려놓았다.
저 코드와 1)번 코드는 꽤 큰 차이가 난다.
이 위에것이 2번, 아래가 1번 코드인데, 이러한 시간 차이가 발생하게 된다.
2. 소스코드 |
1) 처음 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include<iostream> int N, L; void calc() { int count, sum(0), i(L-1), flag(0); while (sum != N) { sum = 0; //괜한 연산을 줄이기 위해 count는 N/i부터 시작한다. //길이는 L부터 시작하여 1씩 증가하도록 하였다. count = N / ++i; //이번에 구할 길이가 100을 초과한다면 flag를 세우고 탈출! if (i > 100) { flag = 1; break; } //N/i로 나누어 값을 준 것은 찾아야 할 값의 평균 값에 불과하다. //우리는 count++한 값을 지속적으로 더할 것이므로, 대략 (평균 값) - (길이/2)이 되어야한다. //허나 따로 구현하기 귀찮으므로, i=100인 것을 기준으로 50을 빼버렸다. count -= 50; //음이 아닌 정수 리스트여야 하므로 0보다 작은 경우는 0부터 시작하도록 하였다. if (count < 0) count = 0; //리스트에 수를 넣어주자. for (int t = 0; t < i; t++) { sum += count++; } //sum < N인 경우 리스트 전체에 1씩 더해준다.(결과적으로 sum += i가 된다.) //이때, count가 가리키는 숫자는 리스트의 마지막 숫자이다. while (sum < N) { sum += i; count++; } } if (flag) { std::cout << "-1"; } else //이건 뭐, 그냥 출력이다. for (i; i > 0; i--) std::cout << count - i << " "; } int main() { std::cin >> N >> L; calc(); } | cs |
2) count에서 시작하는 곳을 따로 지정하지 않을 경우
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include<iostream> int N, L; void calc() { int count, sum(0), i(L-1), flag(0); while (sum != N) { sum = 0; //여기서는 count를 0에서 부터 시작한다. count = 0; i++; if (i > 100) { flag = 1; break; } for (int t = 0; t < i; t++) { sum += count++; } while (sum < N) { sum += i; count++; } } if (flag) { std::cout << "-1"; } else for (i; i > 0; i--) std::cout << count - i << " "; } int main() { std::cin >> N >> L; calc(); } | cs |
3. 참고 |
질문이나 지적 있으시면 댓글로 남겨주세요~
도움 되셨으면 하트 꾹!
'<백준> > |c++| normal' 카테고리의 다른 글
[c++]백준 2740 - 행렬 곱셈 (0) | 2019.04.27 |
---|---|
[c++] 백준 10253 - 헨리(분수를 gcd로 나눠주자) (0) | 2019.04.24 |
[c++] 백준 1912 - 연속합(분할 정복, 동적 계획법) (0) | 2019.04.16 |
[c++] 백준 1520 - 내리막길(동적계획법, 메모이제이션) (0) | 2019.04.14 |
[C++] 백준 9251 - LCS(최장 공통 부분 수열, 동적계획법) (0) | 2019.04.14 |