[Programmers #131705] - 삼총사

G_NooN·2024년 1월 30일
0

Algorithms

목록 보기
29/33
post-thumbnail

(Lv. 1) 삼총사 (문제 링크)

문제 설명

한국중학교에 다니는 학생들은 각자 정수 번호를 가지고 있다.
이 학교의 학생 3명의 정수 번호를 더했을 때 0이 되면, 이 3명의 학생은 삼총사라고 한다.

한국중학교 학생들의 정수 번호를 나타내는 정수 배열 number가 주어졌을 때,
학생들 중 삼총사를 만들 수 있는 방법의 수를 return하는 solution 함수를 완성하라.

예를 들어, 5명의 학생이 각각 [-2, 3, 0, 2, -5] 인 경우,

  1. (1, 3, 4)번째 학생의 정수 번호를 더하면 -2 + 0 + 2 = 0이 되므로 세 학생은 삼총사다.
  2. (2, 4, 5)번째 학생의 정수 번호를 더해도 3 + 2 + (-5) = 0이 되므로 세 학생도 삼총사다.

따라서, 이 경우에 삼총사를 만들 수 있는 방법은 총 2가지이다.

제한 조건

  1. 3 <= number의 길이 <= 13
  2. -1,000 <= number의 원소 <= 1,000
  3. 서로 다른 학생의 정수 번호는 같을 수 있다.

입출력 예시


접근 방식

  1. 입력값: 정수 배열 / 출력값: 배열의 요소 3개의 합이 0이 나오는 경우의 수
  2. 배열의 모든 경우의 수를 계산한다.
    2-1. 첫번째 요소 < 두번째 요소 < 세번째 요소 이기 때문에,
    더할 삼총사의 초기값을 각각 index[i], index[i+1], index[i+2]로 설정한다.
    2-2. 중첩 반복문을 사용하여 경우의 수를 계산한다. (예제 참고)
  • [예제]
    5개의 요소(각 index = [0,1,2,3,4]) 중 3개를 구하는 경우의 수
    • 첫번째 요소 index[0], 두번째 요소 index[1]인 경우 : [0,1,2], [0,1,3], [0,1,4]
    • 첫번째 요소 index[0], 두번째 요소 index[2]인 경우 : [0,2,3], [0,2,4]
    • 첫번째 요소 index[0], 두번째 요소 index[3]인 경우 : [0,3,4]
    • 첫번재 요소 index[1], 두번째 요소 index[2]인 경우 : [1,2,3], [1,2,4]
    • 첫번재 요소 index[1], 두번째 요소 index[3]인 경우 : [1,3,4]
    • 첫번재 요소 index[2], 두번째 요소 index[3]인 경우 : [2,3,4]
  1. 경우의 수에서의 합산 결과가 0이 나올 때마다 결과값을 1씩 증가시킨다.

해결 방법

  1. for문을 사용하여 첫번째 요소를 배열의 끝까지 반복한다.
  2. 중첩 for문을 사용하여 두번째 요소를 배열의 끝까지 반복한다.
  3. 중첩 for문을 사용하여 세번째 요소를 배열의 끝까지 반복한다.
  4. 첫번째 요소 + 두번째 요소 + 세번째 요소 === 0 일 때마다 answer++을 수행한다.
  5. 최종 answer를 출력한다.

코드

function solution(number) {
  let answer = 0;

  for (let i = 0; i < number.length; i++) {
    for (let j = i + 1; j < number.length; j++) {
      for (let k = j + 1; k < number.length; k++) {
        if (number[i] + number[j] + number[k] === 0) answer++;
      }
    }
  }

  return answer;
}

주요 개념

  • 중첩 반복문의 사용을 두려워하지 말자.
profile
쥐눈(Jin Hoon)

0개의 댓글