반응형
문제분석
여러개의 숫자가있는 배열 numbers와 target이 입력으로 주어집니다.
목표: numbers의 숫자를 모두활용하여, + - 만으로 target을 만드는 경우의수를 세기
모든 숫자를 사칙연산중 +,-만을 활용하여 target이 나오는경우를 세주면된다.
사칙연산중 2개의 연산만 고려하면되니, 재귀함수를 활용하면 간단하게 풀수있다.
문제풀이
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
|
class Solution {
boolean[] visited;
int cnt=0;
public int solution(int[] numbers, int target) {
int answer = 0;
visited=new boolean[numbers.length];
recursive(numbers,0,target);
return answer=cnt;
}
public void recursive(int[] numbers,int idx,int target){
//재귀 로직
for(int i=idx;i<numbers.length;i++){
visited[i]=true;
recursive(numbers,i+1,target);
visited[i]=false;
}
//연산 시작
int total=0;
for(int i=0;i<numbers.length;i++){
if(visited[i]==true){
total+=numbers[i];
}
else{
total+=numbers[i]*(-1);
}
}
//타겟과 맞는지확인
if(total==target){
cnt++;
}
}
}
|
cs |
전역변수로 boolean배열 visited를 선언한다. 이 배열을 통해, +연산과 -연산 여부를 결정한다.
전역변수로 cnt를 선언한다. 이 cnt는 타겟변수의 도달한 연산을 세준다.
recursive()함수를 작성한다. 완전탐색을하기위한, 배열,인덱스,타겟넘버를 입력값으로 지정한다.
14~18은 완전탐색을하기위한 재귀로직을 작성하였다.
21~29는 visited[i]에따라 더할지, 뺄지를 결정하고 total을 계산한다.
total이 target과 일치한다면 갯수를 1개 증가시킨다.
반응형
'알고리즘 > 프로그래머스 Level2' 카테고리의 다른 글
[프로그래머스,Java] Level2: 교점에 별 만들기 [위클리 챌린지 10주차] (1) | 2021.10.12 |
---|---|
[프로그래머스, 자바] Level2:전력망을 둘로 나누기 (위클리 챌린지 9주차) (0) | 2021.10.05 |
[프로그래머스,자바] Level2: 행렬 테두리 회전하기 (0) | 2021.09.28 |
[프로그래머스,자바] Level2: 더 맵게 (0) | 2021.09.27 |
[프로그래머스,자바] Level2: 기능개발 (0) | 2021.09.25 |