프로그래머스/lv1

프로그래머스 : 연습문제 > 삼총사(lv1)c++

TIN9 2023. 7. 2.
반응형

프로그래머스 링크

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

 

프로그래머스

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

programmers.co.kr

코드 풀이

재귀를 활용하여 풀이하였습니다.

재귀함수 매개변수로는 number배열, 현재의 값을 확인하는 Cur, 인덱스를 확인하는 index, 총 적용된 숫자의 개수인 Count, 답을 저장하는 answer로 구성하였습니다.

number는 값이 변동되면 안 되고 주소값만을 활용하기 때문에 const &을 활용하였고 answer의 경우 solution함수에서의 answer 주소값을 활용하여 값을 갱신해 주었습니다.

재귀 함수의 원리는 아래와 같습니다.

1. 먼저 값이 0이고 카운트가 3이라면 삼총사를 찾은 것이기 때문에 ++answer하고 리턴

2. 범위를 벗어나면 return

3. 반복문을 순차적으로 돌면서 재귀함수 호출

4. 위 반복

 

 

코드

#include <string>
#include <vector>

using namespace std;

void Func(const vector<int>& number, int Cur, int index, int Count, int& answer)
{
    if (Cur == 0 && Count == 3)
    {
        ++answer;
        return;
    }

    if (index >= number.size() || Count >= 3)
        return;
    
    size_t Size = number.size();
    
    for(size_t i = index; i < Size; ++i)
    {
        Func(number, Cur + number[i], i + 1, Count + 1, answer);
    }
}

int solution(vector<int> number) {
    int answer = 0;
    
    Func(number, 0, 0, 0, answer);
    
    return answer;
}
반응형

댓글