문제1.
기원이는 오늘 항해99를 시작했다. 성격이 급한 기원이는 항해 1일 차부터 언제 수료를 하게될 지 궁금하다. 항해 1일 차 날짜를 입력하면 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만들어보자.
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
public String solution(int month, int day) {
String answer = "";
LocalDate date = LocalDate.of(2022, month, day);
LocalDate newDate = date.plusDays(98);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("M월 dd일");
answer = dateTimeFormatter.format(newDate);
return answer;
}
public static void main(String[] args) {
Main method = new Main();
System.out.println(method.solution(1, 18));
}
java.time.LocalDate 와
java.time.format.DateTimeFormatter 를 import하면 쉽게 풀 수 있는 문제였습니다.
.plusDay() 메소드를 이용하여 날짜를 더합니다.
DateTimeFormatter.ofPattern()을 사용해서 "M월 dd일" 형식으로 출력합니다.
문제2.
지용이는 항해에서 한 주 동안 공부 기록을 남길 알고리즘을 만들어보기로 결심했다. 항해의 체크인 페이지에는 몇가지 조건이 있는데 이를 만족하는 알고리즘을 만들어보자.
체크인과 체크아웃은 항상 정시에 진행한 것으로 가정한다.
체크아웃을 할 때 익일 시간은 24+a 로 계산한다.
즉 새벽 2시는 24+2 인 26으로 표기한다.
체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주한다.
따라서 새벽 5시가 넘어가 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리한다.
public class Main {
public int solution(int[] arr1, int[] arr2) {
int answer = 0;
for(int i=0; i<arr2.length; i++){
if( arr2[i]>=29){
answer += 21-arr1[i];
}else {
answer += arr2[i] -arr1[i];
}
}
return answer;
}
public static void main(String[] args) {
Main method = new Main();
int[] arr1 = {9, 9, 9, 9, 7, 9, 8};
int[] arr2 = {23, 23, 30, 28, 30, 23, 23};
System.out.println(method.solution(arr1, arr2));
}
}
문제3.
문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 소수의 최대값과 소수가 아닌 수의 최소값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "2 3 4 5"라면 "4 5"를 리턴하고, "15 3 10 9 7 8"라면 "8 7"을 리턴하면 됩니다.
소수 찾기가 어렵습니다... 매니저님 오시면 여쭤봐야겠음..
여쭤봤습니다...
import java.util.concurrent.LinkedTransferQueue;
public class primeNumbers {
public String solution(String s) {
String answer = "";
//1은 소수가 아니다
//2를 제외한 짝수도 소수가 아니다.
//제곱근(sqrt) 범위 나누기법이란?
//소수 여부를 검사할 수에 대해서 그 값의 제곱근을 기준으로 그 곱은 대칭적으로 곱이 일어나므로
//제곱근 이하의 작은 값까지만 검사를 하면 나머지는 검사를 할 필요가 없다는 방법으로 검사할 데이터를 제곱근 개 이하로 줄 일 수 있는 방법
//소수 중 최대값
//소수가 아닌 수 중 최소값
int primeMax = 0;
int nonPrimeMin = Integer.MAX_VALUE;
String[] numbers = s.split(" "); //
for (String number : numbers) {
int num = Integer.parseInt(number);
if (numbercheck(num)) {
if (num > primeMax) {
primeMax = num;
}
} else {
if (num < nonPrimeMin) {
nonPrimeMin = num;
}
}
}
return nonPrimeMin + " " + primeMax;
}
private boolean numbercheck(int num) {
//1이하는 소수가 아님
if (num <= 1)
return false;
//2는 소수지만 2로 나누어지는 수는 소수가 아님
if (num % 2 == 0)
return num == 2;
//3부터 소수 검사; 제곱근 이하의 수로 나누어지면 소수
for (int i = 3; i < Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
primeNumbers method = new primeNumbers();
String s = "97 75 88 99 95 92 73";
System.out.println(method.solution(s));
}
}
'TIL' 카테고리의 다른 글
TIL 알고리즘 테스트 review 221124 (1) | 2022.11.25 |
---|---|
TIL 객체지향 예제 만들어보기 식당 매출 프로그램 221123 (0) | 2022.11.23 |
TIL 자바 java 프로그래머스 알고리즘 문제 풀기 221121 (0) | 2022.11.21 |
TIL/WIL 부트캠프 1주차 회고 221120 (1) | 2022.11.20 |
TIL 자바 java 프로그래머스 알고리즘 문제 풀기 221119 (0) | 2022.11.19 |