본문 바로가기
프로그래머스/C

[프로그래머스/C]프로그래머스 Level 1 : 삼총사 C언어

by starfish22 2022. 10. 24.
728x90

▶문제 : 코딩 테스트 연습 - 삼총사 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

▶코드 작성

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// number_len은 배열 number의 길이입니다.
int solution(int number[], size_t number_len) {
    int answer = 0;
    for (int i = 0; i < number_len - 2; i++) {
        for (int j = i + 1; j < number_len - 1; j++) {//i+1부터 시작
            for (int k = j + 1; k < number_len; k++) {//j+1부터 시작
                if (number[i] + number[j] + number[k] == 0) {//합이 0일 때
                    answer++;
                }  
            }
        }
    }
    return answer;
}

 

▶해석

number의 길이가 최대 13이므로 모든 경우의 수를 구해도 시간 초과가 없다고 생각할 수 있다.

따라서 3개의 for문으로 모든 경우의 수를 확인한다.

i=0부터 시작해서 j=i+1, k=j+1로 맞추어 중복 없이 차례대로 반복문을 돌린다.

i <number_len-2 조건을 작성하였는데 만약 i <number_len 라면 다음 반복문에서 j와 k가 number배열을 벗어난 자리를 가리킬 수 있으므로 앞에 2개의 원소를 남긴다는 생각으로 -2를 써준다.

728x90

댓글