728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 내용, 조건, 예시는 프로그래머스 사이트 참조
알고리즘
풀이 방식의 핵심은 3명을 뽑은 경우의 수를 뽑는 것!
그러면 떠오르는 방법은 두가지
- 배열 s의 n개의 원소 중에서 r개의 원소를 택하는 방법 (조합을 구하는 방법)
- 반복문을 이용해서 모든 조합 뽑기
3개의 수만 뽑으면 되기 때문에 조합(next_permutation, prev_permutation)을 사용과 삼중 반복문을 이용해서 조합 뽑는 두가지 방법을 코드로 구성해놨다.
(※ 뽑아야하는 개수가 커지면 반복문 보다는 조합(next_permutation, prev_permutation)을 사용하는 것이 유리함)
위의 방법으로 3명을 뽑았다면 모두 더했을 때, 0이 되는 경우의 수만 카운트해주면 삼총사를 만들 수 있는 방법의 수가 리턴된다.
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 | #include <string> #include <vector> #include <algorithm> using namespace std; int solution(vector<int> number) { int answer = 0; #if 1 // 조합 sort(number.begin(), number.end()); vector<int> tmp(number.size(), 0); tmp[0] = 1; tmp[1] = 1; tmp[2] = 1; do { int num = 0; for(int i = 0; i < tmp.size(); i++) { if(tmp[i] == 1) { num += number[i]; } } if(num == 0) { answer++; } } while(prev_permutation(tmp.begin(), tmp.end())); #else // 삼중 반복문 for(unsigned int i = 0; i < number.size() - 2; i++) { for(unsigned int k = i+1; k < number.size() - 1; k++) { for(unsigned int p = k+1; p < number.size(); p++) { int sum = number[i] + number[k] + number[p]; if(sum == 0) { answer++; } } } } #endif return answer; } | cs |
↓↓↓↓↓↓ 유익했다면 하트 뿅 ♥ ↓↓↓↓↓↓
728x90
반응형
'프로그래밍 > 프로그래머스' 카테고리의 다른 글
Lv1_[최소직사각형, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.01.14 |
---|---|
Lv1_[[1차] 비밀지도, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.01.13 |
Lv1_[문자열 내 마음대로 정렬하기, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.01.11 |
Lv1_[K번째수, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.01.10 |
Lv1_[두 개 뽑아서 더하기, C++] 풀이 및 알고리즘 정리 - 프로그래머스 (0) | 2023.01.03 |
댓글