728x90
반응형
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43165
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90
👩💻 코드
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(vector<int> numbers, int target) {
int answer = 0;
int n = numbers.size();
int total = 1 << n;
for(int mask=0; mask < total; mask++){
int sum = 0;
for (int i=0; i<n; i++){
if(mask & (1 << i)){
sum += numbers[i];
} else{
sum -= numbers[i];
}
}
if(sum == target){
answer++;
}
}
return answer;
}
📝 풀이
이 문제를 풀기 위해서는 모든 수를 더하거나 빼는 경우를 구해야 한다.
모든 수를 더하거나 빼는 두 가지 경우로 2^n 즉, 1 << n 이다.
mask는 모든 가능한 경우의 수를 탐색하기 위한 변수로 'n'개의 비트로 표현된다.
mask의 i번째 비트가 1인지 아닌지 확인하여 sum에 수를 더하거나 뺀다.
최종 결과값이 target과 같다면 answer를 증가시킨다.
모든 경우의 수를 확인했다면 answer를 return한다.
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] k진수에서 소수 개수 구하기 (0) | 2024.08.12 |
---|---|
[프로그래머스] [3차] n진수 게임 (0) | 2024.08.12 |
[프로그래머스] [1차] 뉴스 클러스터링 (0) | 2024.08.08 |
[프로그래머스] 피로도 (0) | 2024.08.03 |
[프로그래머스] 튜플 (0) | 2024.07.31 |