Practice1 : 제일 작은 수 제거하기
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
arr | return |
[4,3,2,1] | [4,3,2] |
[10] | [-1] |
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
int[] result = obd.solution(new int[] {4,3,2,1,7,190});
System.out.println(Arrays.toString(result));
}
public int[] solution(int[] arr) {
int[] answer = {};
if(arr.length <= 1 ) {
return new int[]{-1};
} else {
int cnt = 0;
answer = new int[arr.length - 1];
Arrays.sort(arr);
for(int inx=arr.length-1; inx>0; inx--) {
answer[cnt] = arr[inx];
cnt++;
}
}
return answer;
}
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
int[] result = obd.solution(new int[] {4,3,2,1,7,190});
System.out.println(Arrays.toString(result));
}
public int[] solution(int[] arr) {
if (arr.length <= 1) return new int[]{ -1 };
int min = Arrays.stream(arr).min().getAsInt();
return Arrays.stream(arr).filter(i -> i != min).toArray();
}
Practice2 : 하샤드 수
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
arr | return |
10 | true |
12 | true |
11 | false |
13 | false |
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
boolean result = obd.solution( 10 );
System.out.println(result);
}
public boolean solution(int inputNumber) {
boolean answer = true;
int copyOfNum = inputNumber;
int sum = 0;
while(copyOfNum != 0 ) {
int lastDigit = copyOfNum % 10;
sum+=lastDigit;
copyOfNum /= 10;
}
if(inputNumber % sum == 0 ) {
answer = true;
} else {
answer = false;
}
return answer;
}
Practice3 : 행렬의 덧셈
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
arr1 | arr2 | return |
[[1,2],[2,3]] | [[3,4],[5,6]] | [[4,6],[7,9]] |
[[1],[2]] | [[3],[4]] | [[4],[6]] |
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
int [][] arr1 = {{1,2},{3,4}};
int [][] arr2 = {{3,4},{5,6}};
int[][] result = obd.solution( arr1, arr2 );
System.out.println(Arrays.deepToString(result));
}
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = new int[arr1.length][arr1[0].length];
for(int inx=0; inx<arr1.length; inx++) {
for(int jnx=0; jnx<arr1[inx].length; jnx++) {
answer[inx][jnx] = arr1[inx][jnx] + arr2[inx][jnx];
}
}
return answer;
}
Practice4 : 예산
S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다.
물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.
부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원해 줄 수 있는지 return 하도록 solution 함수를 완성해주세요.
d | budget | return |
[1,3,2,5,4] | 9 | 3 |
[2,2,3,3] | 10 | 4 |
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
int [] arr = {1,3,2,5,4};
int result = obd.solution( arr, 9 );
System.out.println(result);
}
public int solution(int[] d, int budget) {
int answer = 0;
Arrays.sort(d);
for(int inx=0; inx<d.length; inx++) {
if(budget >= d[inx] ) {
budget -= d[inx];
answer++;
}
}
return answer;
}
Practice5 : 소수 찾기
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
n | result |
10 | 4 |
5 | 3 |
int numberOfPrime(int n) {
int count = 0;
int result = 0;
for(int i = 1 ; i <= n ; i++){
for(int j = 1 ; j <= i ; j++){
if ( i % j == 0) count++;
}
if(count == 2) result++;
count = 0;
}
return result;
}
public static void main(String[] args) {
NumOfPrime prime = new NumOfPrime();
System.out.println( prime.numberOfPrime(10) );
}
Practice6 : 정수 제곱근 판별
임의의 정수 n에 대해, n이 어떤 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
n | return |
121 | 144 |
3 | -1 |
public static void main(String[] args) {
OrderByDesc obd = new OrderByDesc();
long result = obd.solution( 121 );
System.out.println(result);
}
public long solution(long n) {
if (Math.pow((int)Math.sqrt(n), 2) == n) {
return (long) Math.pow(Math.sqrt(n) + 1, 2);
}
return -1;
}
Practice7 : 최대공약수와 최소공배수
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
n | m | return |
3 | 12 | [3, 12] |
2 | 5 | [1, 10] |
public static void main(String[] args) {
TryHelloWorld c = new TryHelloWorld();
System.out.println(Arrays.toString(c.gcdlcm(3, 12)));
}
public int[] gcdlcm(int a, int b) {
int[] answer = new int[2];
answer[0] = gcd(a,b);
answer[1] = (a*b)/answer[0];
return answer;
}
public static int gcd(int p, int q){
if (q == 0) {
return p;
}
return gcd(q, p%q);
}
class TryHelloWorld {
public static void main(String[] args) {
TryHelloWorld c = new TryHelloWorld();
System.out.println(Arrays.toString(c.gcdlcm(3, 12)));
}
public int[] gcdlcm(int a, int b) {
int[] answer = new int[2];
int standard = (a > b) ? a : b;
for(int i=1; i<=standard; i++){
if(a % i == 0 && b % i == 0) answer[0] = i;
}
answer[1] = (a * b) / answer[0];
return answer;
}
}
'Java Programming' 카테고리의 다른 글
Java algorithm practice level2 coding1 (0) | 2019.05.09 |
---|---|
2차원 배열 유용한 메서드 모음 (0) | 2019.05.03 |
Java algorithm practice level1 coding2 (0) | 2019.04.28 |
Java algorithm practice level1 coding1 (0) | 2019.04.06 |