< 문제 설명 >
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수,
solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
< 제한 조건 >
- arr은 자연수를 담은 배열입니다.
- 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
- divisor는 자연수입니다.
- array는 길이 1 이상인 배열입니다.
< 코드 및 풀이 >
*Programmers에서도 정확성 테스트 통과, eclipes에서 직접 입력할 배열의 길이, 배열 값, 나눌값을
받아 변환 값 출력 한 코드
1. 배열이 비어있으면 -1을 넣어 리턴해야하니 cnt로 배열의 idx 수 확인, 나누어떨어지는 수 % 나머지=0을
이용하고 Arrays.sort를 통해 배열 순차 정리
import java.util.*;
public class Divisor {
public static int[] solution(int[] arr, int divisor){
int cnt = 0; //배열 안에 요소 cnt
for(int i=0;i<arr.length;i++) {
if(arr[i]%divisor==0) cnt++;
}
if(cnt==0) {
int[] answer = {-1};
return answer;
}
int[]answer = new int[cnt]; //배열을 담을 cnt 크기로 설정
for(int i=0, j=0;i<arr.length;i++) {
if(arr[i]%divisor==0) {
answer[j++] = arr[i];
}
}//나눠지면 배열 담기, 같은 idx여야하니 j번째 담기
Arrays.sort(answer);
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("입력할 배열의 수를 입력하세요.");
int n = sc.nextInt();
System.out.println("변환 할 배열을 입력하세요.");
int[]arr = new int[n];
for(int i=0;i<n;i++) {
System.out.println(i+1 +"번째 숫자을 입력하세요");
arr[i] = sc.nextInt();
}
System.out.println("나눌 수를 입력하세요.");
int divisor = sc.nextInt();
System.out.println("변환된 배열은 "+Arrays.toString(solution(arr, divisor))+" 입니다.");
//Arrays.toString으로 배열 주소 값이 아닌 문자로 출력
System.exit(0); //자바 종료
}
}
2. 선형 리스트는 idx를 비우지 않고 이동해 채운다. 이를 이용하면 cnt 대신 리스트가 비어있으면 -1추가 해주면 된다.
또한 (idx가 일치하니)for문을 다시 돌리지 않고 리스트의 값을 그냥 배열에 넣어 정렬
public static int[] solution(int[] arr, int divisor) {
ArrayList<Integer>list = new ArrayList<Integer>();//선형 리스트 생성
for(int i=0;i<arr.length;i++) {
if(arr[i]%divisor==0) list.add(arr[i]);
}
if(list.isEmpty()) list.add(-1);
int[]answer = new int[list.size()];
for(int i=0;i<list.size();i++) {
answer[i]=list.get(i);
}
Arrays.sort(answer);
return answer;
}
<알게 된 사실 & 중요한 점>
알고리즘은 쉽게 그려졌으나 자바 언어에 대해 미숙함으로 조금 버벅였던 부분들이 있었다. 정말 자바 언어에는
좋은 기능이 많이 있고 이를 전체를 외울순 없더라도 중요한 것들은 조금씩 정리하며 어느정도 숙지해야겠다 생각했다.
1. List의 자바 문법에 대해 알 수 있었다.
-ArrayList -> 크기가 가변적인 선형 리스트
-ArrayList<타입 설정>리스트이름 = new Arraylist<타입>();
-리스트 이름.add -> 값 추가
-리스트 이름.size -> 리스트의 길이
-리스트 이름.remove(숫자) ->index 숫자 제거
-리스트 이름.clear-> 전체 제거
-리스트 이름.get(숫자)->index 숫자 값 리턴
2. Arrays.sort(배열이름) -> 배열을 오름차순으로 정렬
3. 배열 출력 방법 *기존의 for문을 사용보다 간단
- 배열은 기본적으로 주소의 값을 반환한다. 배열 자체에 toString() 사용시 주소 값이 출력
- Arrays.toString(배열이름) -> 배열의 내용을 출력
'coding test > programmers' 카테고리의 다른 글
[Programmers] 이상한 문자 만들기(JAVA)-Level 1 (0) | 2022.08.09 |
---|---|
[Programmers]완주하지 못한 선수(JAVA)-Level 1 (0) | 2022.08.07 |
[Programmers] 수박수박수박수박수?(JAVA)-LEVEL 1 (0) | 2022.08.07 |
[Programmers]2016(JAVA)-LEVEL 1 (0) | 2022.08.06 |