본문 바로가기
알고리즘

자바 - 프로그래머스 - 삼총사

by Won's log 2024. 4. 2.

프로그래머스 문제 '삼총사' 를 풀어보았다.

 

문제와 예시는 다음과 같다.

 

😞 처음 구현한 코드 (복잡한 로그 주의⛔️)

import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        int[] number = {-2, 3, 0, 2, -5};
        int answer = 0;

        // 셋 더 해서 0이 되어야 함
        // 경우의 수
        // 3 ≤ number의 길이 ≤ 13
        for(int i=0; i< number.length-2; i++) {
            for (int j = 1; j < number.length; j++) {
                for (int z = 2; j < number.length; j++) {
                    if (number[i] + number[j] + number[z] == 0) answer++;
                    System.out.println("i = " + number[i]);
                    System.out.println("j = " + number[j]);
                    System.out.println("z = " + number[z]);
                    System.out.println("answer = " + answer);
                }
            }
        }
    }
}

// 
i = -2
j = 3
z = 0
answer = 0
i = -2
j = 0
z = 0
answer = 0
i = -2
j = 2
z = 0
answer = 1
i = -2
j = -5
z = 0
answer = 1
i = 3
j = 3
z = 0
answer = 1
i = 3
j = 0
z = 0
answer = 1
i = 3
j = 2
z = 0
answer = 1
i = 3
j = -5
z = 0
answer = 1
i = 0
j = 3
z = 0
answer = 1
i = 0
j = 0
z = 0
answer = 2
i = 0
j = 2
z = 0
answer = 2
i = 0
j = -5
z = 0
answer = 2

 

처음에는 아무 생각 없이 for문 돌리면 되겠지라는 가벼운 마음으로 임했더니 역시나 동일한 인덱스의 숫자를 중복으로 가져오는 경우가 발생하였다. 

 

🤓 풀이 설계

[삼중 for문을 사용하되 중복값을 처리하자]
1. 세 개의 값이 모두 다르게 설정되어야 하므로 초기값을 이전 초기값+1로 설정하기

 

 

😎수정된 코드

class Solution {
    public int solution(int[] number) {
       int answer = 0;
        for(int i=0; i< number.length-2; i++) {
            for(int j=i+1; j<number.length; j++) {
                for(int z=j+1; z<number.length; z++) {
                    if (number[i] + number[j] + number[z] == 0) answer++;
                }
            }
        }
        return answer;
    }
}

 

배운 점

1. 매우 간단한 논리로 시작된 코드였지만 역시나 예외는 어디에서나 존재한다.

2. 초기값과 범위를 자유롭게 구사할 줄 아는 개발자가 되자.