알고리즘 (JAVA) 004 & 알고리즘 모의고사

2m·2022년 7월 19일
0

알고리즘

목록 보기
5/6

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로 초기화 하는 작업을 하지 않았다가 배열의 길이를 넘어가서 문제가 생겼다.

그래도 잘 해결해서 모의고사를 무사히 마쳤다!

profile
hi

0개의 댓글