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;
    }

}

+ Recent posts