[Algorithme] 삼총사

gunggme·2023년 12월 30일

알고리즘

목록 보기
35/42

시작

이번 문제는 삼총사다. 이 삼총사라고 하면 3개의 수의 합이 0이 되는 수의 배열인데, 그 배열을 구하는 것은 아주 쉽다.

int solution(vector<int> number) {
	int answer = 0;
    // 0번 부터 최대 크기 -2 까지 탐색
	for (int i = 0; i < number.size() - 2; i++) {
    	// i+1번 부터 최대 크기 -1까지 탐색
		for (int j = i + 1; j < number.size() - 1; j++) {
        	// j+1번 부터 최대 크기만큼 탐색
			for (int k = j + 1; k < number.size(); k++) {
				if (number[i] + number[j] + number[k] == 0) {
					answer++;
				}
			}
		}
	}
	return answer;
}

우선 이런식의 코드를 짜주면 되는데 한번 봐보자. 3개의 합이 0이 되도록 배열을 구하려면 하나씩 구해봐야 되는 것 밖에 답이 없다. 그러기 위해 인덱스들의 [0, 1, 2], [1, 2, 3]... 등을 하나씩 찾아야 되는 것인데, 가장 쉬운 방법인 3중 for문을 이용해 문제를 해결하였다.
[최대크기-2, 최대크기-1, 최대크기]를 이용해 해결을 한 이유는 만약 5개의 배열이 주어져있다 하자. 그렇다면 i는 결국 최대인 4번을 탐색하는 도중 3번재 for문에서 i + 2번째의 인덱스를 방문하게 되면 7번째에 방문하게 된다. 그렇게 되면 최대 범위를 벗어나기에 저런식으로 해결을 하였다.

profile
안녕하세요!

0개의 댓글