Conversation
10757, 1759, 2503, 2798, 2858번 제출합니다
[3월 18일] 브루트포스/1759.cpp
Outdated
There was a problem hiding this comment.
p1.
지금 조합을 구하기 위해서 tmp 벡터에 l개만큼 1을 넣어주시고 next_permutation 을 돌려주셨네요! 그러나 next_permutation 을 활용하기 위해서는 temp 벡터에 반드시 오름차순 정렬을 먼저 수행해주셔야합니다. next_permutation 은 현재 수보다 다음으로 큰 수를 찾는 방식으로 모든 순열을 구하는 함수이기 때문입니다! 반면 현재 tmp 벡터는 1,1,1,1,0,0 로 초기화 되어있으니 (c=6, l=4일때를 예시로 들음) 다음번째로 큰 수가 존재하지 않으므로 모든 경우의 수를 구하지 못하고 조합 하나만 반환할 것입니다! 그래서 아래와 같이 정렬 후 활용해주셔야 모든 경우의 수를 구할 수 있습니다!
// permutation 위해서, temp 벡터에 l개 만큼 1을 넣어준다
for (int i = 0; i < l; i++) temp.push_back(1);
for (int i = l; i < c; i++) temp.push_back(0);
sort(ch.begin(), ch.end());
sort(temp.begin(), temp.end()); // temp 를 오름차순 정렬
do {
for (int i = 0; i < c; i++) {
// 모음 개수
int v_cnt = 0;
if (temp[i] == 1) {
cout << ch[i]<<" ";
}
}
cout << '\n';
} while (next_permutation(temp.begin(), temp.end()));
그러나 사실 위 결과대로 출력해도 제대로된 결과를 얻지 못합니다. 왜냐하면 모든 경우의 수를 구할 수는 있지만, 사전순으로 단어들을 출력하지는 못하기 때문입니다. temp를 오름차순 정렬한 후 next_permutation으로 조합을 구하면 temp는 반복문을 돌때마다 아래와 같은 변화를 거치게 됩니다.
0 0 1 1 1 1
0 1 0 1 1 1 // 0 0 1 1 1 1 보다 다음번째로 큰수
0 1 1 0 1 1 // 0 1 0 1 1 1 보다 다음번째로 큰수
...
1 1 1 1 0 0
따라서 위 코드의 결과는 아래와같이 사전순과 정 반대되는 순서로 문자열을 출력하게 됩니다!

이럴때에는 내림차순 정렬된 컨테이너에서도 조합을 구할 수 있도록 해주는 prev_permutaion을 이용해볼 수 있습니다! 관련 링크 첨부하니 참고하셔서 문제 해결에 도움이 되었으면 하는 바람입니다 :)
https://twpower.github.io/82-next_permutation-and-prev_permutation
[3월 18일] 브루트포스/1759.cpp
Outdated
There was a problem hiding this comment.
p1.
v_cnt < 1 일 경우는 어짜피 조건문에 걸리지 않으니 굳이 적어주지 않아도 될 것 같아요!
[3월 18일] 브루트포스/1759.cpp
Outdated
There was a problem hiding this comment.
p1.
지금 모음이 하나이상있는지 체크하는 부분은 있는데 자음이 두개이상 최소 존재하는지 체크하는 부분이 없네요!
[3월 18일] 브루트포스/1759.cpp
Outdated
There was a problem hiding this comment.
p1.
이 부분도 마찬가지에요 어짜피 반복문에 끝에 위치하니 continue가 의미 없겠죠!
[3월 18일] 브루트포스/2798.cpp
Outdated
There was a problem hiding this comment.
p2.
지금도 잘 작성해주셨는데요 ! 세장의 카드를 뽑는 반복문은 보통 이런식으로 많이 작성하는것 같아요!👍
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
[3월 18일] 브루트포스/2503.cpp
Outdated
There was a problem hiding this comment.
숫자에 0이 포함되어있을 경우 답으로 카운트될 수 없다는 코너케이스를 잘 캐치해주셨네요👍👍👍
[3월 18일] 브루트포스/2503.cpp
Outdated
There was a problem hiding this comment.
맞아요! 모든 경우의 수를 다 해보는 것 이게 바로 브루트포스죠 👍
[3월 18일] 브루트포스/2503.cpp
Outdated
[3월 18일] 브루트포스/2503.cpp
Outdated
There was a problem hiding this comment.
p1.
반복문을 n회 돌때마다 매번 조건을 체크하는데다가 n회중 마지막 1번만 조건이 참이 될테니 반복문안에서 확인하는 것은 조금 비효율적이어보여요! 이부분은 for문 밖에 작성하면 마지막루프인지 확인하는 if (j == n - 1) 라는 중첩 if문을 작성할 필요가 없어지는데다가 한번의 조건 체크만으로도 가능해지니 훨씬 깔끔할 것 같아요! 그런데 물론 모든 테스트케이스가 일치했는지 저장해주는 bool변수가 추가적으로 필요하겠죠,,!
[3월 18일] 브루트포스/10757.cpp
Outdated
There was a problem hiding this comment.
p2. 먼저 두개의 스택이 비어있지 않을 동안 값들을 계산하는 처리를 먼저 해주고, 그 이후에 A,B 스택에 남아있는 값들을 처리해주어도 괜찮았을 것 같아요! 아래 코드처럼요!
`while(!a.empty() && !b.empty) {
//값 더하고 res에 푸시 }
while( !a.empty()) {// a에 원소가 남아있다면
}
while( !b.empty()){ // b에 원소가 남아있다면
}
내용 & 질문
<기존 제출>
<추가 제출>