본문 바로가기
코드카타/코딩테스트

타겟 넘버

by WaDDak 2024. 8. 16.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 :

#include <string>
#include <vector>

using namespace std;

int answer = 0;

//                         주어진 벡터 , 타겟넘버, 현재수행중인 숫자 인덱스, 현재까지 더해진 숫자 합
void DFS(const vector<int>& _Numbers, int _Target, int _Index = 0, int _Sum = 0)
{
    if (_Index == _Numbers.size())
    {
        if (_Sum == _Target)
        {
            answer++;
        }
        return;
    }

    DFS(_Numbers, _Target, _Index + 1, _Sum + _Numbers[_Index]);
    DFS(_Numbers, _Target, _Index + 1, _Sum - _Numbers[_Index]);
}

int solution(vector<int> numbers, int target) {

    DFS(numbers, target);


    return answer;
}

 

개선사항 :

  1. 글로벌 변수 사용:
    • 나 : answer의 변수를 전역 변수로 선언하여 결과를 저장하고 있습니다.
    • 개선 : answer변수를 함수 내부에서 관리하여, 함수 호출 시 초기화 되고, 다른 함수 호출과 독립적으로 결과를 계산할 수 있습니다.
  2. 코드의 구조와 함수 호출 :
    • 나 : DFS함수가 solution함수 외부에 정의되어 있으며, 기본 인덱스와 합을 설정해 두고 시작합니다. 이로 인해 answer는 누적된 값을 유지하게 됩니다.
    • 개선 : DFS함수는 solution함수 내에서 호출되고, answer는 지역 변수로 선언되어 함수 호출 시마다 초기화 됩니다. 따라서 함수가 호출될 때마다 새롭게 값을 계산하게 됩니다.
  3. 결론  :
    1. 전역 변수를 사용한 코드와 지역 변수를 사용한 코드는 큰 차이가 없지만, 전역 변수는 여러 번의 함수 호출 간의 상태를 관리하기 어렵게 만듭니다.
    2. 지역 변수를 사용하는 방식이 더 모듈화되고 예측 가능한 코드 작성 방법입니다. 이는 특히 여러 테스트 케이스를 처리해야 하거나, 코드를 재사용할 때 중요합니다.
    3. 전반적으로 개선사항을 수용하면 코드가 더 견고하고, 유지관리가 쉬운 구조를 가지게 됩니다.

 

개선 코드 : 

#include <vector>

using namespace std;

void DFS(const vector<int>& numbers, int target, int& answer, int index = 0, int Sum = 0) {
    if (index == numbers.size()) 
    {
        if (currentSum == target) 
        {
            answer++;
        }
        return;
    }

    DFS(numbers, target, index + 1, Sum + numbers[index], answer);
    DFS(numbers, target, index + 1, Sum - numbers[index], answer);
}

int solution(vector<int> numbers, int target) {
    int answer = 0;
    DFS(numbers, target, answer);
    return answer;
}

'코드카타 > 코딩테스트' 카테고리의 다른 글

단어 변환  (0) 2024.08.16
게임 맵 최단거리  (0) 2024.08.16
더 맵게  (0) 2024.08.15
기능개발  (0) 2024.08.15
같은 숫자는 싫어  (0) 2024.08.15