[Java] 항해99 알고리즘 모의고사(1 ~ 3)

rara_kim·2022년 11월 23일
0

알고리즘 문제풀이

목록 보기
9/10

항해99 알고리즘 모의고사 문제풀이, 모범답안이 없어서 좀 아쉽다...


☘️1.신대륙 발견(하)

문제 설명

기원이는 오늘 항해99를 시작했다. 성격이 급한 기원이는 항해 1일 차부터 언제 수료를 하게될 지 궁금하다.
항해 1일 차 날짜를 입력하면 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만들어보자.

제한 조건

  • 1 ≤ month ≤ 12
  • 1 ≤ day ≤ 31 (2월은 28일로 고정합니다, 즉 윤일은 고려하지 않습니다.)

입출력 예

monthdayresult
1127"3월 5일"
622"9월 28일"

지정 입력값

monthdayresult
118"4월 26일"

☀️내 코드

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Practice {
	public String solution(int month, int day) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("M월 d일");

		Calendar cal = Calendar.getInstance();
		cal.set(2022, month - 1, day);
		cal.add(Calendar.DATE, 98);

		return dateFormat.format(cal.getTime());
	}
}



☘️2.몇시간 했더라?(중)

문제 설명

지용이는 항해에서 한 주 동안 공부 기록을 남길 알고리즘을 만들어보기로 결심했다.
항해의 체크인 페이지에는 몇가지 조건이 있는데 이를 만족하는 알고리즘을 만들어보자.

  • 체크인과 체크아웃은 항상 정시에 진행한 것으로 가정한다.
  • 체크아웃을 할 때 익일 시간은 24+a 로 계산한다. 즉 새벽 2시는 24+2 인 26으로 표기한다.
  • 체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주한다. 따라서 새벽 5시가 넘어가 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리한다.

제한 조건

  • 체크인(checkin)과 체크아웃(checkout)을 진행한 시간이 담긴 배열 두 개가 주어진다.
  • 각 배열에는 월요일부터 일요일까지 체크인/아웃을 한 시간이 담겨있다.
  • checkin과 checkout 배열의 길이는 각각 7 이다.

입출력 예

checkincheckoutresult
[9, 9, 8, 8, 7, 8, 9][21, 25, 30, 29, 22, 23, 30]96
[9, 7, 8, 9, 7, 9, 8][23, 22, 26, 26, 29, 27, 22]110

지정 입력값

checkincheckoutresult
[9, 9, 9, 9, 7, 9, 8][23, 23, 30, 28, 30, 23, 23]102

☀️내 코드

public class Practice02 {

	public int solution(int[] arr1, int[] arr2) {
		int answer = 0;

		for (int i = 0; i < arr1.length; i++) {
			if (arr2[i] >= 29) {
				arr2[i] = 21;
			}
			answer += arr2[i] - arr1[i];
		}

		return answer;
	}
}



☘️3.소수의 개수와 덧셈(상)

문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 소수의 최대값과 소수가 아닌 수의 최소값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "2 3 4 5"라면 "4 5"를 리턴하고, "15 3 10 9 7 8"라면 "8 7"을 리턴하면 됩니다.

제한 조건

  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
  • 문자열에는 소수가 한개 이상 섞여 있습니다.
  • 문자열에는 소수가 아닌 수가 한개 이상 섞여 있습니다.
  • 음수는 없습니다.

입출력 예

sresult
"2 3 4 5""4 5"
"15 3 10 9 7 8""9 7"

지정 입력값

sresult
“97 75 88 99 95 92 73”"75 97"

☀️내 코드

public class Practice03 {

	public String solution(String s) {
		StringBuilder answer = new StringBuilder();
		String[] strArray = s.split(" ");

		ArrayList<Integer> primeList = new ArrayList<>();
		ArrayList<Integer> noPrimeList = new ArrayList<>();

		for (int i = 0; i < strArray.length; i++) {
			if (!checkNumber(strArray[i])) {
				noPrimeList.add(Integer.parseInt(strArray[i]));
			} else {
				primeList.add(Integer.parseInt(strArray[i]));
			}
		}

		int maxNumber = Integer.MIN_VALUE;
		int minNumber = Integer.MAX_VALUE;

		for (int noPrime: noPrimeList) {
			minNumber = Math.min(minNumber, noPrime);
		}
		answer.append(minNumber);
		answer.append(" ");

		for (int prime: primeList) {
			maxNumber = Math.max(maxNumber, prime);
		}
		answer.append(maxNumber);

		return answer.toString();
	}

	public boolean checkNumber(String num) {
		int number = Integer.parseInt(num);
		for (int i = 2; i < number; i++) {
			if (number % i == 0) {
				return false;
			}
		}
		return true;
	}
}

profile
느리더라도 꾸준하게

0개의 댓글