일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c++
- Programming
- Kotlin
- Visual Studio
- 연산자
- 김성엽
- 함수
- Direct2D
- 지식나눔강좌
- 문법
- Win32
- 프로그래밍
- 리뷰
- 알고리즘
- Desktop
- 티스토리
- 배열
- tipssoft
- Tips강좌
- doit코틀린프로그래밍
- 이지스퍼블리싱
- CS
- VS ERROR
- 백준
- Javascript
- 포인터
- Tips프로그래밍강좌
- Windows
- c#
- c
Archives
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
BAEKJOON 15649:N과 M(1) 본문
반응형
제한시간 내 순열 만들기
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
코드
순열 자체를 구하는 속도는 빠르지만, 이를 하나씩 출력하는 과정에서 속도를 잡아먹는 것이 많기 때문에 stringstream에 출력할 문자열을 저장한 뒤, 최종에 한번 출력하도록 하여 속도 향상을 꾀함
#include <iostream>
#include <algorithm>
#include <sstream>
using namespace std;
int visited[9];
int permutationList[9];
stringstream ss;
void bt(int maxValue, int depth, int maxDepth) {
if (depth == maxDepth) {
string str;
for (int i = 0; i < maxDepth; ++i) {
ss << permutationList[i] << " ";
}
ss << endl;
return;
}
for (int i = 1; i <= maxValue; ++i) {
if (!visited[i]) {
visited[i] = true;
permutationList[depth] = i;
bt(maxValue, depth + 1, maxDepth);
visited[i] = false;
}
}
}
int main() {
int n, m;
cin >> n >> m;
bt(n, 0, m);
cout << ss.str();
return 0;
}
위 코드로 작성시 16ms로 나오고
ios.sync_with_stdio(0);
cin.tie(0);
위 두 함수를 사용하여 입출력 비동기화를 진행한 경우보다 빨랐음을 확인했다.
알고리즘 최적화도 최적화지만 큰 출력이 필요한 경우엔 여러번에 나눠 출력하는 것보다 모아서 한번에 출력하는게 속도 향상에 도움이 되었다.
뭣보다, 개인적으로 저 두 코드 사용하는게 꼼수같은 느낌이라 그리 선호하지도 않는다. 특히나 알고리즘을 공부하는 문제에 있어서, 저 명령을 통해서라야 통과할 수 있는 기준을 제시한 문제가 있다면 수정되어야하지 않을까.. 싶기도 하다.
728x90
반응형
'DEV > Algorithm' 카테고리의 다른 글
brute force VS. KMP algorithm (0) | 2025.04.07 |
---|---|
BAEKJOON 1912:연속합(DP) (0) | 2021.12.21 |
BAEKJOON 1932:정수 삼각형(DP) (0) | 2021.12.21 |
BAEKJOON 11053:가장 긴 증가하는 부분 수열 O(nLogn) for C++(DP) (0) | 2021.12.21 |
BAEKJOON 11053:가장 긴 증가하는 부분 수열 O(n²) for C (0) | 2021.09.08 |
Comments