250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)
    • AI Life (0)
      • 생각 넓히기 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • 백준
  • 카카오
  • AI
  • JPA
  • ADsP
  • Python
  • SpringMVC
  • 선형대수
  • 자바
  • swift
  • 프로그래머스
  • 개발자
  • certificate
  • BFS
  • JAVA8
  • BOJ
  • 구현
  • 코딩테스트
  • 파이썬
  • ios
  • DP
  • 문제풀이
  • Front-end
  • 개발
  • uArm
  • 브루트포스
  • java
  • 알고리즘
  • 머신러닝
  • data

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim
CodingTest/Programmers

[PGM_43165] 타겟 넘버 (java)

[PGM_43165] 타겟 넘버 (java)
CodingTest/Programmers

[PGM_43165] 타겟 넘버 (java)

2022. 1. 31. 02:37
728x90
728x90

문제링크

https://programmers.co.kr/learn/courses/30/lessons/43165

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수

programmers.co.kr

문제풀이

👨🏻‍💻 핵심 스킬 👨🏻‍💻
 브루트포스 - 재귀

2021.11.02 - [CordingTest/Algolithm] - 브루트포스(2) 재귀

배열과 타겟넘버 두개의 인풋이 들어온다. 이 때 배열의 값을 적당히 + 혹은 -로 넣어주어 더해서 타겟 넘버를 만족시키는 경우의수를 모두 구하는 문제이다. 배열의 개수가 최대 20개 까지 들어올 수 있으며 경우의 수는 2n2n로 시간내로 들어올 수 있으므로 브루트포스를 사용하였다.

 

브루트포스를 재귀로 구현을 하였고, 이 때 부호는 boolean 배열을 만들어 +인지 -인지 확인하여주는 방법으로 구현을 하였다.

구현코드

package pgm_43165;

public class Solution {
    public int solution(int[] numbers, int target) {
        boolean[] signs = new boolean[numbers.length];
        int answer = recursive(numbers,signs,0,target);
        return answer;
    }

    public int recursive(int[] numbers,boolean[] signs, int check,int target) {
        if(check == numbers.length){
            int result = 0;
            for(int i = 0; i < numbers.length; i++){
                int sign = signs[i] ? 1 : -1;
                result += numbers[i] * sign;
            }
            if(result == target)
                return 1;
            else
                return 0;
        }
        signs[check] = false;
        int value1 = recursive(numbers,signs,check+1,target);
        signs[check] = true;
        int value2 = recursive(numbers,signs,check+1,target);
        return value1 + value2;
    }
}

 

시간복잡도

배열의 크기를 n이라고 하면, O(2n)O(2n)이 된다.

잘못된 지식이나 궁금한 내용이 있을 경우 편하게 댓글 남겨주시면 감사하겠습니다 :)

 

728x90
728x90
저작자표시 비영리 (새창열림)

'CodingTest > Programmers' 카테고리의 다른 글

[PGM_77485] 행렬 테두리 회전하기 (java)  (0) 2022.02.01
[PGM_12973] 짝지어 제거하기 (java)  (0) 2022.01.31
[PGM_42626] 더 맵게 (Java)  (0) 2022.01.30
[PGM_42626] 더 맵게 (Java)  (0) 2022.01.30
[PGM_42586] 기능개발 (java)  (0) 2022.01.30
  • 문제링크
  • 문제풀이
  • 구현코드
  • 시간복잡도
'CodingTest/Programmers' 카테고리의 다른 글
  • [PGM_77485] 행렬 테두리 회전하기 (java)
  • [PGM_12973] 짝지어 제거하기 (java)
  • [PGM_42626] 더 맵게 (Java)
  • [PGM_42626] 더 맵게 (Java)
JinSeopKim
JinSeopKim
기록📚

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.