Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 해결
- 개발자
- 배열
- docker
- 스프링 부트
- 도커
- spring boot
- 프로그래머스
- bfs
- 구현
- 주니어
- 명령어
- Java
- 문자열
- 자료구조
- 구름LEVEL
- dfs
- 이직
- 코딩테스트
- 인텔리제이
- IntelliJ
- HTTP
- spring
- 스프링부트
- 스타트업
- 해시맵
- Linux
- 백엔드
- HashMap
- 스프링
Archives
- Today
- Total
마이의 개발 블로그
[프로그래머스] 타겟 넘버 (Java) 본문
반응형
모든 경우의 수를 탐색해야하는 문제이다보니 재귀함수를 선언하여 DFS로 해결했다.
- int[] numbers를 탐색하며 마지막 인덱스까지 각 idx의 숫자를 더하거나 뺌
- idx가 마지막인 경우, sum을 target과 비교하여 일치하면 경우의 수 1을, 일치하지 않으면 0을 반환함
- 반환할 때마다 경우의 수가 더해져 최초 호출된 메서드는 전체 경우의 수를 반환함
Note
- 멤버 변수(lastIdx, targetNum, targetNums)는 메서드를 간단하게 작성하고 싶어 사용했다.
- 간단한 문제인데 밤에 풀어서 그런가 종료조건이 명확하게 코드로 바로 나오지 않아 생각하는데 시간이 좀 걸렸다.
class Solution {
public int solution(int[] numbers, int target) {
int answer = 0;
lastIdx = numbers.length - 1;
targetNum = target;
targetNums = numbers;
answer = calculate(-1, 0);
return answer;
}
private int lastIdx, targetNum;
private int[] targetNums;
private int calculate(int idx, int sum){
if(idx == lastIdx){
return sum == targetNum ? 1 : 0;
}
return calculate(idx + 1, sum + targetNums[idx + 1]) + calculate(idx + 1, sum - targetNums[idx + 1]);
}
}
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 위장 (Java) (0) | 2023.01.29 |
---|---|
[프로그래머스] 프린터 (Java) (0) | 2023.01.27 |
[프로그래머스] 우박수열 정적분 (Java) (0) | 2023.01.25 |
[프로그래머스] 다트 게임 (Java) (0) | 2023.01.24 |
[프로그래머스] 멀리 뛰기 (Java) (0) | 2023.01.20 |
Comments