inflearn logo
강의

Course

Instructor

10-Week Completion C++ Coding Test | Algorithm Coding Test

1-A

1-A문제 순열재귀함수 질문입니다.

376

dkswhdgur1209

23 asked

0

안녕하세요 강사님!

일곱난쟁이문제를 순열로 풀 때 순열의 방법으로 do-while permutation와 재귀함수가 있습니다.

이 중, 일곱난쟁이문제를 순열의 재귀함수를 통해서 푸는 방법으로

풀고 싶어서 풀다가 어느 코드의 구현이 잘못 된지를 몰라서 질문 드립니다.

http://boj.kr/ad5d9ed01b4c433cadf0e458aad20a09

 

코테 준비 같이 해요! C++

Answer 1

1

kundol

안녕하세요 1209님 ㅎㅎ

이 문제는

7개를 합해 100이 될 때 출력! 하고 끝내는 문제죠?

그리고..

가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

>> 를 고려해주셔야 해요. 여러개 일 때 그냥한번 출력하고 끝!! 하는 문제입니다.

 

자 그러면

void printV(vector<int> &v){
	int sum = 0;
	for(int i = 0; i < 7; i++){
		sum += v[i];
		if(sum == 100) break;
	}
	for(int i = 0; i < v.size() - 2; i++){
		cout << v[i] << '\n';
	}
	cout << '\n';
}

이 코드가 수정되어야 할 것같지 않을까요?

일단은 sum == 100 break;를 하면 안되겠죠? 그러면 5개를 더하고 100일 때 경우가 잘못체킹이 되죠?

그리고 이 함수로써 main함수를 끝내야 해요. 이 때는 exit(0)을 써야 합니다. (교안 참고)

그리고 swap된 v를 기반으로 하는게 아니라 새로운 배열을 만들어 sort를 해서 오름차순으로 출력까지 해야겠죠?

void printV(vector<int> &v){  
	int sum = 0;
    vector<int> temp;
	for(int i = 0; i < 7; i++){
		sum += v[i]; 
        temp.push_back(v[i]);
	}
    if(sum == 100){  
        sort(temp.begin(), temp.end());
        for(int a : temp) cout << a << " "; 
        exit(0);
    } 
}

이렇게 고치시면 됩니다.

나머지 코드는 너무나도 잘 짜셨습니다. ㅎㅎ

 

감사합니다.

1-E질문입니다!

0

509

2

3-L 틀린 부분 피드백 부탁드립니다.

0

811

2

1-A 일곱난쟁이문제입니다

0

451

1

문제 풀 때 방향성에 대해

0

793

1

맥에서 vs code로 실행 관련 질문입니다

0

515

1

17071번 메모리 초과

0

381

1

1-C질문입니다!

0

412

2

2-B BFS 시간초과질문

0

623

2

1-O 13번 라인

0

435

1

6-J 놀이공원 문제 질문

0

376

1

구현관련 질문

0

479

1

강의 교안

0

313

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

541

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

531

1

1-K

0

468

2

3-G번 질문있습니다.

1

464

3

3-C 실행 시간 질문드립니다.

0

489

1

4-A 문제 풀이 질문있습니다.

0

586

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

430

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

329

1

3-O go 함수 질문 드립니다.

1

437

2

4-A 출력 질문

0

299

1

1주차 1-O 질문드립니다

0

250

1

2-S (1325번 - 효율적인 해킹) 문제 질문 드립니다.

0

505

1