본문 바로가기
프로그래머스 코딩테스트 문제/Level 1

[프로그래머스] - 삼총사(C#)

by jyppro 2023. 8. 18.

삼총사

이번에는 "삼총사" 문제를 풀어보도록 하겠습니다. 초반에는 개념적인 문제가 주로 나왔다면 이제부터는 이론적인 내용을 풀어서 이야기에 적용한 문제들이 주로 나올 것입니다. 한번 살펴보겠습니다.

 

문제 설명

한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.

 

제한 사항

  • 3 ≤ number의 길이 ≤ 13
  • -1,000 ≤ number의 각 원소 ≤ 1,000
  • 서로 다른 학생의 정수 번호가 같을 수 있습니다.

 

입출력 예

number result
[-2, 3, 0, 2, -5] 2
[-3, -2, -1, 0, 1, 2, 3] 5
[-1, 1, -1, 1] 0

 

입출력 예 설명

입출력 예 #1
문제 예시와 같습니다.


입출력 예 #2
학생들의 정수 번호 쌍 (-3, 0, 3), (-2, 0, 2), (-1, 0, 1), (-2, -1, 3), (-3, 1, 2) 이 삼총사가 될 수 있으므로, 5를 return 합니다.


입출력 예 #3
삼총사가 될 수 있는 방법이 없습니다.

 

시작 코드

using System;

public class Solution {
    public int solution(int[] number) {
        int answer = 0;
        return answer;
    }
}

 

나의 풀이

using System;

public class Solution {
    public int solution(int[] number) {
        int cnt = 0;
        for(int i = 0; i < number.Length; i++)
        {
            for(int j = i+1; j < number.Length; j++)
            {
                for(int k = j+1; k < number.Length; k++)
                {
                    if(number[i] + number[j] + number[k] == 0)
                    {
                        cnt++;
                    }
                }
            }
        }
        return cnt;
    }
}

 

코드 분석

int형 배열 number가 주어지며 코드가 시작됩니다. int형으로 처음에 주어진 answer를 cnt로 바꿔주고, 3중for문 안에 if문을 사용합니다. 각 for문은 첫번째부터 i = 0부터 number의 길이만큼, j는 i + 1부터, k는 j + 1부터 시작합니다. if문에서는 각 for문을 거친 number[i], number[j], number[k]의 값을 모두 더한 것이 0이라면 cnt를 올려줍니다. 최종적으로 cnt를 반환하며 끝이 납니다.

 

풀이 설명

문제의 요구사항을 살펴보면, 학생은 각자 번호를 가지고 있고, 3명을 묶었을 때 0이되면 삼총사라고 합니다. 이렇게 삼총사를 만들 수 있는 방법의 수를 찾는 것이 문제사항입니다. number 배열은 학생의 수와 학생이 가지고 있는 숫자 두가지를 동시에 사용할 수 있는 배열입니다. 즉, number의 길이만큼 순서대로 학생들을 3명씩 묶어 더한 값이 0이면 삼총사 카운트를 추가 해주면 됩니다.

 

<NEXT>

오늘은 "삼총사" 문제를 풀어보았습니다. 다음에는 "크기가 작은 문자열" 문제를 다뤄보도록 하겠습니다. 감사합니다.