JAVASCRIPT/코딩테스트

[프로그래머스] 1단계 - 삼총사

예글 2024. 2. 14. 16:25

1. 문제 설명

 

2. 답안

const NUM = 3;

function solution(number) {
    let answer = 0
    const tmp = []
    
    const backtrack = (cur) => {
        // tmp 길이가 3이면 
        if (tmp.length === NUM){
            // tmp의 합을 계산 후 0이면 answer에 1 더하기
            answer += tmp.reduce((a,b)=> a + b) ? 0 : 1
            return
        }
        
        // tmp 만들기
        for (let i = cur; i < number.length; i++){
            tmp.push(number[i])
            
            // 재귀호출할 때마다 cur을 사용하여 다음 인덱스로 이동
            backtrack(i + 1)
            
            // 다음 경우를 탐색하기 전 현재 요소를 제거
            tmp.pop()
        }
    }
    
    backtrack(0)
    
    return answer
}

 

- 이 문제를 통해 백트래킹을 배웠다. 삼중for문으로도 풀 수 있었지만 알고리즘을 공부하기 위해 코딩테스트를 푸는 만큼 최대한 알고리즘을 활용해서 풀면 좋은 것 같다. 다음에 비슷한 문제가 나오면 스스로 해결할 수 있도록 내 것으로 만들어야 겠다!