반응형
숫자로만 이루어져 있는 배열 하나, 배열의 숫자들을 나눠줄 인자값 하나로 문제를 풀어야한다.
반환할 값이 있는 경우에 반환하되, 반환할 값이 없다면 -1을 return한다.
딱! 보면 금방풀 수 있는 문제
지만
나는 똥고집 부린다고 엄청 헤맸다.
그냥 ArrayList 사용해서 넣어줄건 넣어주고 뺄건 빼 버렸음 됐는데 뭐에 씌인건지 ArrayList 말고 단순 배열을 반복문으로 제어하면 되지 않을까? 하다가 시간만 왕창 날렸다 ㅋㅋㅋㅋ
ArrayList를 사용하면 문제가 상당히 쉬워진다.
ArrayList로 Integer형 배열을 하나 만들고, 파라미터로 넘어온 s배열과 divisor를 반복문으로 나누며, 만약 나머지가 0일 경우 해당 숫자를 중간 배열에 넣어준다.
반복문이 종료되고 0으로 나눠지는 수가 없었다면 -1을 반환해주고, 있었다면 코드 제출용 answer 배열에 숫자를 넣어준다.
또 하나의 조건으로 배열은 오름차순으로 정렬하라고 했으니 마지막으로 sort를 사용해준다. 그리고 제출하면 ?!
끄읏!
아래는 해답
package list;
import java.util.ArrayList;
import java.util.Arrays;
public class Programmers_DivisionNumberArrays {
public static int[] solution(int[] s, int divisor) {
// answer에 값을 넣어 정답을 제출하기 전, 중간 다리 역할을 해줄 ArrayList
ArrayList<Integer> bridge = new ArrayList<Integer>();
// 우선 파라미터로 넘어온 s 배열을 divisor 변수를 사용해서 나눠본다
for (int i = 0; i < s.length; i++) {
// 나눴을 때 나머지가 0이라면 - 나눠지는 수
// 그렇다면 bridge 배열에 s[i] 숫자를 넣어준다. (add)
if (s[i] % divisor == 0) {
bridge.add(s[i]);
}
}
// 반복문이 종료되고 bridge가 비어있다면? -1을 반환한다.
if(bridge.isEmpty()) {
bridge.add(-1);
}
// bridge의 배열 크기 = answer의 배열 크기
int answer[] = new int[bridge.size()];
// bridge의 크기만큼 반복문을 실행하며, bridge의 값을 answer에 담아준다.
for (int i = 0; i < bridge.size(); i++) {
answer[i] = bridge.get(i);
}
// 문제에서는 오름차순으로 정렬하라고 했으니 Arrays.sort 사용
Arrays.sort(answer);
// answer에 담긴 값 리턴
return answer;
}
public static void main(String[] args) {
// 파라미터
// int[] result = solution(new int[]{5, 9, 7, 10}, 5);
int[] result = solution(new int[]{2, 36, 1, 3}, 1);
// 솔루션 값 출력
System.out.print(Arrays.toString(result));
}
}
고집은.. 가끔 도움이 되지만 대부분 몸과 머리에.. 해롭다 ㅠㅠㅠ
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Java 프로그래머스 레벨1 두 정수 사이의 합 해답 (0) | 2021.09.14 |
---|---|
[Programmers] Java 프로그래머스 레벨1 자연수 뒤집어 배열로 만들기 해답 (0) | 2021.09.11 |
[Programmers] Java 프로그래머스 레벨1 정수 내림차순으로 배치하기 해답 (Arrays, Collection) (0) | 2021.09.06 |
[Programmers] Java 프로그래머스 레벨1 가운데 글자 가져오기 해답 (0) | 2021.09.05 |
[Programmers] Java 프로그래머스 레벨1 제일 작은 수 제거하기 해답 (0) | 2021.09.02 |