인텔리제이 프로젝트 빌드 오류 해결방법
에러 코드
Module 'week' production: java.lang.ClassCastException: class org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast to class org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ClassType (org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType and org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ClassType are in unnamed module of loader java.net.URLClassLoader @1c20c684)
해결 방법
- Menu → Build → Build project / Rebuild project
- Menu → File → Invalidate caches / Restart → 첫번 째 항목 체크 → Invalidate and Restart
- 최근에 설치하거나 활성화한 플러그인을 제거
- Check dependencies (especially cyclic-dependencies) in → File → Project Structure... → Modules
- 마지막 수단: 백업을 만들고 프로젝트 디렉토리에서 .idea 폴더를 제거한 다음, 처음부터 새 프로젝트를 생성
항해 99 알고리즘 테스트
1. 잔돈의 최소 갯수 구하기
package test4.test1;
public class Main {
/*
* 금액 1000원
* 편의점에는 500, 100, 50, 10원이 충분하고 직원은 거스름돈 개수가 가장 적게 줌
* 물건을 사고 1000원을 1장 냈을 때 받을 잔돈의 개수
* 물건 가격: 10 <= price <= 1000, 1원 단위 미고려
* amount = 1000 에서 물건 가격(price)을 뺀 값
* price = 물건 가격
* answer = 받은 거스름돈 개수
* 각 거스름돈 단위별로 나눗셈 연산 사용*/
public int solution(int price) {
int answer = 0;
int amount = 1000 - price;
int value500 = amount / 500; // 거스름돈에서 500원 개수
int value100 = (amount % 500) / 100; // 거스름돈에서 500원 개수 뺀 100원 개수
int value50 = (amount % 500 % 100) / 50; // 거스름돈에서 500, 100원 뺀 50원 개수
int value10 = (amount % 500 % 100 % 50) / 10; // 거스름돈에서 500,100,50원 뺀 10원 개수
answer = value500 + value100 + value50 + value10; // 거스름돈 개수 총합
return answer;
}
public static void main(String[] args) {
Main method = new Main();
int num1 = 160;
System.out.println(method.solution(num1));
System.out.println(method.solution(900));
System.out.println(method.solution(550));
System.out.println(method.solution(320));
System.out.println(method.solution(160));
System.out.println(method.solution(700));
}
}
- 나눗셈 연산을 사용해 물건을 사고 남은 돈에서 500, 100, 50, 10원의 거스름돈으로 받을 동전의 갯수를 구함
2. 일주일간 총 공부시간 구하기
public class Main {
/*
* 체크인과 체크아웃은 항상 정시
* 체크아웃을 할 때 익일 시간은 24+a로 계산, 새벽 2시는 24+2 = 26
* 체크인 페이지는 체크 아웃이 새벽 5시 정각 및 5시를 넘아가면 체크아웃을 깜박한 것으로 간주
* 새벽 5시 지나서 체크아웃하면 체크아웃 시간을 21로 처리
*
* 제한조건
* 체크인과 체크아웃 진행한 배열 2개
* 각 배열에는 월~일까지 체크인, 체크아웃 시간이 있음
* 각 배열의 길이는 7
*
* 체크인 체크 아웃 배열을 보고 일주일 공부 시간을 return
* 각 배열 번호 별로 시간을 계산하고 총합을 구함
* 1일 공부 시간은 체크아웃 - 체크인
* 29 이상부터는 21로 처리하도록 계산 - 조건문 사용*/
public int solution(int[] arr1, int[] arr2) {
int answer = 0;
for (int i = 0; i < 7; i++) { // 제한 사항 배열 길이 7이므로 7 입력 배열 길이 제한이 없을 경우 length 사용
if (arr2[i] >= 29) {
answer += 21 - arr1[i]; // 새벽 5시 이후 체크 아웃은 오후 9시 체크 아웃 시간으로
} 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));
System.out.println(method.solution(new int[]{9, 9, 8, 8, 7, 8, 9}, new int[]{21, 25, 30, 29, 22, 23, 30}));
System.out.println(method.solution(new int[]{9, 7, 8, 9, 7, 9, 8}, new int[]{23, 22, 26, 26, 29, 27, 22}));
}
}
- 이중 반복문 및 조건문을 사용해 체크 아웃 시간 - 체크 인 시간을 계산해 1일 공부시간을 구하고 총 공부시간에 합산
3. 문자열 안의 소수 최대값과 소수가 아닌 수의 최소값 구하기
package test4.test3;
import java.util.Arrays;
public class Main {
/*
* 문자열 s에는 공백으로 구분된 숫자가 저장
* s에 나타나는 숫자 중 소수의 최대값과 소수가 아닌 수의 최소값을 찾고
* "(최소값)(최대값)"형태의 문자열로 반환
* s가 "2 3 4 5"면 "4 5"를 리턴
* 제한 사항
* 문자열 s에는 소수, 소수가 아닌 수 1개 이상은 있음
* 음수(-)는 없음
* 문자열 공백 기준으로 잘라서 Integer.parseInt로 형변환
* 소수 판별 조건문 1개 및 소수로 판별된 수 중에 최대 값 찾기
* 소수가 아닌 거로 판별된 수 중에 최소 값 찾기*/
public String solution(String s) {
// 문자열 s를 공백 기준으로 자르고(split), stream mapToInt로 각 문자열 숫자를 int로 형변환
int[] check_number = Arrays.stream(s.split(" ")).mapToInt(Integer::parseInt).toArray();
// 최대 소수 값
int maxPrimeNum = 0;
// 최소 소수가 아닌 값
int minNonPrimeNum = Integer.MAX_VALUE; // 최대 값으로 지정 후 최소 값 구하기
//배열의 각 값을 순회하며 소수인지 아닌지 확인
// 소수는 1과 자신 외의 수로는 안 나눠지므로 약수가 있는지 확인
// 해당 수의 제곱근 까지만 확인
for (int num : check_number) {
boolean isPrime = true;
// num이 0, 1인 경우를 확인하는 조건문
if (num <= 1) {
isPrime = false;
} else {
for (int i = 2; i <= Math.sqrt(num); i++) {
// num이 i로 나눌 때 나머지가 없으면 소수가 아님
if (num % i == 0) {
isPrime = false;
break;
}
}
}
// 소수 최대값, 소수 아닌 수 최소 값 갱신
if (isPrime) {
// 소수 최대 값 갱신
maxPrimeNum = Math.max(maxPrimeNum, num);
} else {
// 소수 아닌 수 최소 값 갱신
minNonPrimeNum = Math.min(minNonPrimeNum, num);
}
}
// 결과를 공백으로 구분하여 반환 (소수 아닌 수의 최소값) 공백 (소수의 최대값)
String answer = minNonPrimeNum + " " + maxPrimeNum;
return answer;
}
public static void main(String[] args) {
Main method = new Main();
String s = "97 75 88 99 95 92 73";
System.out.println(method.solution(s));
System.out.println(method.solution("2 3 4 5"));
System.out.println(method.solution("15 4 10 9 7 8"));
System.out.println(method.solution("15 3 10 9 7 8"));
System.out.println(method.solution("1 3 4 5 9 11 16"));
}
}
- Stream API를 사용해 문자열을 자르고 숫자로 형변환 하여 배열로 변환
- 이중 반복문 및 조건문을 사용해 배열의 수가 소수인지 소수가 아닌지 판별 후 소수인 값은 최대값으로 갱신하고 소수가 아닌 값은 최소 값으로 갱신
- 0, 1에 대한 조건문도 추가
멘토링 내용 요약
- 코딩 테스트 준비 시 랜덤 카테고리로 공부하는 것보다 하나의 카테고리 문제를 많이 풀면서 익숙해 지는 게 좋음
- 한 문제를 다양한 방식으로 푸는 것보다 본인이 익숙한 방식으로 푸는 것이 효율적임
- 공부할 때 설명으로만 이해가 안 될 경우
- 이론 부분을 먼저 정리하고 해당 부분의 예제를 찾아보거나
- 자신이 배운 것을 사용해서 예제를 만들어보는 것도 이해하는데 도움이 됨
- 한글로만 검색하지말고 영어로 검색하는 것도 더 다양한 예제를 찾는데 도움이 됨
- 공부를 할 때 한 번에 여러 부분에 대해 하지말고 중요한 부분에 중점을 두고 공부하는 것이 좋음
'항해 99 > Java' 카테고리의 다른 글
빌터 패턴 (1) | 2024.02.26 |
---|---|
WIL - 3 (0) | 2024.02.25 |
Java - 모던 자바 (0) | 2024.02.19 |
Java - 프로세스, 쓰레드 (0) | 2024.02.19 |
WIL - 2 (0) | 2024.02.18 |