문제 지문 #4
자연수가 중복 없이 들어있는 배열이 있습니다. 이 배열에서 합이 K의 배수가 되도록 서로 다른 숫자 세 개를 고르는 방법은 몇 가지인지 세려고 합니다.
자연수가 들어있는 배열 arr가 매개변수로 주어질 때, 이 배열에서 합이 K의 배수가 되도록 서로 다른 숫자 세 개를 고르는 방법의 가짓수를 return 하도록 solution 메서드를 완성해주세요.
매개변수 설명
자연수가 들어있는 배열 arr가 solution 메소드의 매개변수로 주어집니다.
- arr의 길이는 3 이상 100 이하입니다.
- arr에는 1 이상 1,000 이하의 자연수가 중복 없이 들어있습니다.
- K는 1 이상 10 이하의 자연수입니다.
return 값 설명
배열에서 합이 K의 배수가 되도록 서로 다른 숫자 세개를 고르는 방법의 가짓수를 return 해주세요.
- 그러한 방법이 없다면 0을 return 하면 됩니다.
예시
arr | K | return |
[1, 2, 3, 4, 5] | 3 | 4 |
예시 설명
다음과 같이 4가지 방법이 있습니다.
- 1 + 2 + 3 = 6
- 1 + 3 + 5 = 9
- 2 + 3 + 4 = 9
- 3 + 4 + 5 = 12
혼자 풀이
메소드 전체를 완성하는 문제입니다. 20분 정도 걸렸습니다.
처음에는 배열을 ArrayList로 변경한 후에 첫 번째 수를 remove로 제거하고 나머지에서 또 하나를 remove로 제거하는 식으로 하나씩 숫자를 추출하려고 했는데, 잘 안되었습니다.
그런데, 그렇게 하려고 하다보니, 어차피 순서 상관없고 중복 없이 추출하면 된다는 걸 알게 되어서 for문 세 개를 순차적으로 돌리는 것으로 코딩을 했습니다.
/***********************************************
2차 4번 K의 배수가 되도록 숫자 세 개 고르기
***********************************************/
// 다음과 같이 import를 사용할 수 있습니다.
class MySolution {
public int solution(int[] arr, int K) {
// 여기에 코드를 작성해주세요.
int answer = 0;
//배열에서 3개의 숫자를 중복없이 추출하여 합을 구한다.
for(int i=0;i<arr.length-2;i++){ // 뒤에 두자리를 남겨야 하므로 -2를 한다.
for(int j=i+1;j<arr.length-1;j++){ //뒤에 한자리를 남겨야 하므로 -1을 한다.
for(int k=j+1;k<arr.length;k++){
if((arr[i]+arr[j]+arr[k])%K==0){
answer++;
}
}
}
}
//그 합을 K로 나누었을때 나머지가 0인 경우가 몇개인지 구한다.
return answer;
}
// 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
public static void main(String[] args) {
MySolution sol = new MySolution();
int[] arr = {1, 2, 3, 4, 5};
int K = 3;
int ret = sol.solution(arr, K);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("solution 메소드의 반환 값은 " + ret + " 입니다.");
}
}
정답
코드가 참 간결하네요. 저는 for문이 index를 벗어나지 않도록 i에서 -2, j에서 -1을 해주었는데,
정답처럼 증가를 먼저 해주면 되는 거였네요. 그리고 arr.length를 별도 변수로 빼서 계산을 간결하게 해준것도 깔끔합니다.
class CorrectSolution {
public int solution(int[] arr, int K) {
int n = arr.length;
int count = 0;
for(int i = 0; i < n; ++i)
for(int j = i + 1; j < n; ++j)
for(int k = j + 1; k < n; ++k)
if((arr[i]+arr[j]+arr[k])%K == 0)
count += 1;
return count;
}
}
# 첨부 파일
프로젝트 파일 전체를 첨부합니다.
Solution 이 문제, CorrectSolution 이 정답, MySolution이 제가 푼 것입니다.
"Project from existing sources..." 메뉴에서 불러다 쓰시면 됩니다.
'Programming > Cos Pro 1급' 카테고리의 다른 글
Cos Pro 1급 - 샘플 문제 풀이 2차 6번 (switch-case문 사용) (0) | 2022.10.14 |
---|---|
Cos Pro 1급 - 샘플 문제 풀이 2차 5번 (배열: Index Out of Bounds피하기) (0) | 2022.10.13 |
Cos Pro 1급 - 샘플 문제 풀이 2차 3번 (각 자리수의 숫자 더하기) (0) | 2022.10.11 |
Cos Pro 1급 - 샘플 문제 풀이 2차 2번 (0) | 2022.10.10 |
Cos Pro 1급 - 샘플 문제 풀이 2차 1번 (0) | 2022.10.09 |
댓글