import java.util.Arrays;// *Arrays.sort()
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = {};
int cnt =0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] % divisor == 0){
cnt++;
}
}
answer = new int[cnt];//입출력 예 1번의 경우 파라미터 배열과 앤써 배열의 길이가 다르다.
if(cnt > 0){
for (int i =0; i < arr.length; i++){
if(arr[i] % divisor == 0) {
answer[cnt-1] = arr[i]; //cnt의 0으로 시작할 수 없어서 역순으로 넣기
cnt--;
}
}
}else {
answer = new int[1];// 마이너스 1 넣기 위해 길이 지정
answer[0] = -1;
}
Arrays.sort(answer); //*오름차순으로 만드는 방법
return answer;
}
}
힌트를 보기 전까지 풀지 못했던 문제, 어차피 오름차순 정렬을 후에 해줄 것이기 때문에 배열에 높은 인덱스를 기준으로 거꾸로 담는 것은 좋은 아이디어라고 생각한다.
오늘은 코딩테스트 모의고사를 봤다.
public class Main {
public String solution(int month, int day) {
String answer = "";
int[] arMonth ={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for(int i=1; i<99; i++){
day += 1; //받은 day에서 98일 만큼을 더해준다.
}
for (int i=0; i<12; i++) {
if(month<=12){//*달이 12월을 넘어갈 때
if (day > arMonth[month]) {//day의 값이 해당 달의 날짜보다 높으면
day -= arMonth[month];//98일을 더한 day에서 해당 달의 날짜만큼을 빼준다.
month++;//달을 높여준다.
}else break;
}else {
month=1;//*달을 1월로 초기화 해준다.
}
}
answer = month+"월" + day+"일";
return answer;
}
자바의 배열은 사용이 자유롭지 않기에 여러가지를 고려해야 한다. 인덱스 번호나 배열의 길이 등을 계산하지 않으면 예상치 못한 예외 상황이 생기기도 한다. 처음에는 month<=12 일 경우 month를 1로 초기화 하는 작업을 하지 않았다가 배열의 길이를 넘어가서 문제가 생겼다.