<Algorithm> 21. 2003번 수들의 합2
by BFine반응형
1. 2003번 수들의 합2
주어진 수 배열을 순서대로 기준을 잡아서 더해 주어진 결과 값과 일치하는 경우의 수를 구하는 문제
두개의 left, right 포인트를 지정하여 위치를 변경하는 방식으로 재귀를 통해 풀이
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 44 45 46 47 48 49 50 51 52 53 54 55 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int count = 0; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); int[] input = new int[N]; st = new StringTokenizer(br.readLine()); for(int i = 0; i < N; i++) { input[i] = Integer.parseInt(st.nextToken()); } sumNumber(input, M, 0, 0); System.out.println(count); } private static void sumNumber(int[] input, int M, int left, int right) { int res = 0; if(right >= input.length) return; // right가 범위를 벗어나면 종료 for(int i = left; i <= right; i++) { // 기준점까지의 합 res += input[i]; } if(res <= M || ( (res >= M) && (left == right) ) ){ // 총합이 작을 경우 Right를 옮겨준다. if(res == M)count++; sumNumber(input, M, left, right + 1); } else if(res >= M) { // 총합이 클경우 Left를 옮겨준다. if(res == M)count++; sumNumber(input, M, left + 1, right); } } } | cs |
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 22. 1261번 알고스팟(벽1 부수기) (0) | 2018.08.01 |
---|---|
<Algorithm> 21. 1806번 부분합 (0) | 2018.08.01 |
<Algorithm> 20. 9095번 1,2,3 더하기 (0) | 2018.07.31 |
<Algorithm> 19. 1963번 소수경로 (0) | 2018.07.31 |
<Algorithm> 18. 1697번 숨바꼭질 (0) | 2018.07.30 |
블로그의 정보
57개월 BackEnd
BFine