[PS] Programmers/코딩테스트 연습/연습문제/삼총사
2024. 2. 21. 22:27ㆍ✨ PS(ProblemSolving)
문제 설명
한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.
해결 전략
- 주어진 number를 3개씩 잘라서 threeNums라는 배열에 담는 함수 sliceNums 생성
- threeNums에 담긴 요소들을 꺼내어 합이 0일 경우 answer에 1을 더함
작성 코드
function solution(number) {
var answer = 0;
const sliceNums = () => {
let threeNums = [];
for (i = 0; i < number.length - 2; i++) {
threeNums.push(number.slice(i, i+2))
}
return threeNums
}
const threeNums = sliceNums();
threeNums.forEach(num => {
let sum = 0;
for(i = 0; i < 3; i++) {
sum = sum + num[i]
}
sum === 0 ? answer++ : answer
})
return answer;
}
오류 수정
- slice범위를(i,i+3)으로 수정
- threeNums가 모든 case를 포함하지 못하고있음
- 재귀함수를 사용하여 모든 case를 포함하도록 하고, 길이가 3이면서 요소의 합이 0일 때 answer에 1을 더하는 로직으로 변경
완성 코드
function solution(numbers) {
let answer = 0;
const n = numbers.length;
const findCombination = (start, sum, selected) => {
if (selected.length === 3) {
if (sum === 0) {
answer++
}
return
}
for (i = start; i < n; i++) {
findCombination(i + 1, sum + numbers[i], [...selected, numbers[i]]);
}
}
findCombination(0, 0, [])
return answer
}
'✨ PS(ProblemSolving)' 카테고리의 다른 글
[PS] Programmers/코딩테스트/연습문제/기사단원의 무기[LV1] (0) | 2024.03.21 |
---|---|
[PS] Programmers/코딩테스트 연습/연습문제/피보나치 수[Lv2] (0) | 2024.02.28 |
[PS] Programmers/코딩테스트 연습/연습문제/크기가 작은 부분 문자열 (0) | 2024.02.20 |
[PS] Programmers/코딩테스트 연습/연습문제/다음 큰 숫자 (0) | 2024.02.19 |
[PS] Programmers/코딩테스트 연습/코딩테스트 입문/등수 매기기 (0) | 2023.10.12 |