프로그래머스 문제 '삼총사' 를 풀어보았다.
문제와 예시는 다음과 같다.
😞 처음 구현한 코드 (복잡한 로그 주의⛔️)
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. 초기값과 범위를 자유롭게 구사할 줄 아는 개발자가 되자.
'알고리즘' 카테고리의 다른 글
자바 - 백준 - 1436번 영화감독 숌 (0) | 2024.04.05 |
---|---|
자바 - 프로그래머스 - 숫자 문자열과 영단어 (2) | 2024.04.04 |
자바 - 프로그래머스 - 이상한 문자 만들기 (0) | 2024.04.02 |
프로그래머스 - 가운데 글자 가져오기 - 자바 (0) | 2024.03.25 |
프로그래머스 - 문자열의 앞의 n글자 - 자바 (0) | 2023.12.04 |