Notice
Recent Posts
Recent Comments
Link
Star_project
CosPro JAVA 1급 기출 3회 문제1 본문
#문제1
정수로 이루어진 두 배열 arrA와 arrB가 주어질 때, arrA를 회전해 arrB로 만들 수 있는지 알아보려 합니다. 배열의 회전이란 모든 원소를 오른쪽으로 한 칸씩 이동시키고, 마지막 원소는 배열의 맨 앞에 넣는 것을 말합니다.
이를 위해 다음과 같이 프로그램 구조를 작성했습니다.
1. arrA와 arrB의 길이가 다르면 false를 return 합니다.
2. 두 배열의 구성 성분이 달라 회전했을 때 같아질 가능성이 없다면 false를 return 합니다.
3. arrA 배열을 두 번 이어 붙여 길이가 2배인 배열로 만듭니다.
4. arrA의 부분 배열 중 arrB와 같은 배열이 있으면 true를, 그렇지 않으면 false를 return 합니다.
두 배열 arrA와 arrB가 매개변수로 주어질 때, arrA를 회전해 arrB로 만들 수 있으면 true를, 그렇지 않으면 false를 return 하도록 solution 메소드를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 메소드와 매개변수를 알맞게 채워주세요.
#####매개변수 설명
두 배열 arrA와 arrB가 solution 메소드의 매개변수로 주어집니다.
- arrA의 길이는 1 이상 1,000 이하입니다.
- arrA의 원소는 0 이상 1,000 이하의 정수입니다.
- arrB의 길이는 1 이상 1,000 이하입니다.
- arrB의 원소는 0 이상 1,000 이하의 정수입니다.
#####return 값 설명
arrA를 회전해 arrB로 만들 수 있으면 true를, 그렇지 않으면 false를 return 해주세요.
#####예시
arrA | arrB | return |
---|---|---|
[1, 2, 3, 4] | [3, 4, 1, 2] | true |
[1, 2, 3, 4] | [1, 4, 2, 3] | false |
#####예시 설명
예시 #1
arrA 배열을 오른쪽으로 2칸 회전하면 arrB와 같아집니다.
예시 #2
arrA 배열은 회전해도 arrB와 같아질 수 없습니다.
class Solution {
int[] func_a(int[] arr) { // 길이가 2배인 배열 만들기
int length = arr.length;
int[] ret = new int[length*2];
for(int i = 0; i < length; i++)
ret[i + length] = ret[i] = arr[i];
return ret;
}
boolean func_b(int[] first, int[] second){ //회전했을 때 같은지
int[] counter = new int[1001];
for(int i = 0; i < first.length; i++){
counter[first[i]]++;
counter[second[i]]--;
}
for(int i = 0; i < 1001; i++)
if(counter[i] != 0)
return false;
return true;
}
boolean func_c(int[] first, int[] second){ // 부분 배열 중 second와 같은 배열이 있으면 true
int length = second.length;
for(int i = 0; i < length; i++){
int j;
for(j = 0; j < length; j++)
if(first[i + j] != second[j])
break;
if(j == length)
return true;
}
return false;
}
public boolean solution(int[] arrA, int[] arrB) {
if(arrA.length != arrB.length)
return false;
if(func_b(arrA, arrB)) { // if(func_@@@(@@@)) {
int[] arrAtemp = func_a(arrA); // int[] arrAtemp = func_@@@(@@@);
if(func_c(arrAtemp, arrB)) // if(func_@@@(@@@))
return true;
}
return false;
}
// 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
public static void main(String[] args) {
Solution sol = new Solution();
int[] arrA1 = {1, 2, 3, 4};
int[] arrB1 = {3, 4, 1, 2};
boolean ret1 = sol.solution(arrA1, arrB1);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("solution 메소드의 반환 값은 " + ret1 + " 입니다.");
int[] arrA2 = {1, 2, 3, 4};
int[] arrB2 = {1, 4, 2, 3};
boolean ret2 = sol.solution(arrA2, arrB2);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("solution 메소드의 반환 값은 " + ret2 + " 입니다.");
}
}
public boolean solution(int[] arrA, int[] arrB) {
if(arrA.length != arrB.length)
return false;
if(func_b(arrA, arrB)) { // if(func_@@@(@@@)) {
int[] arrAtemp = func_a(arrA); // int[] arrAtemp = func_@@@(@@@);
if(func_c(arrAtemp, arrB)) // if(func_@@@(@@@))
return true;
}
return false;
}
'코딩테스트 > JAVA' 카테고리의 다른 글
CosPro JAVA 1급 기출 3회 문제3 - 체스에서 비숍(Bishop) 말을 놓을 수 있는 빈칸의 개수 (0) | 2022.06.13 |
---|---|
CosPro JAVA 1급 기출 3회 문제2 (0) | 2022.06.13 |
CosPro JAVA 1급 기출 2회 문제10 (0) | 2022.06.13 |
CosPro JAVA 1급 기출 2회 문제9 (0) | 2022.06.13 |
CosPro JAVA 1급 기출 2회 문제8 (0) | 2022.06.13 |