본문 바로가기
Algorithm(알고리즘)/프로그래머스 고득점 Kit

Java 프로그래머스 Level1 연습문제 모음 #3 (21~32)

by Jun_N 2020. 12. 30.

21. 제일 작은 수 제거하기

import java.util.*;
 
class Solution {
      public int[] solution(int[] arr) {
        int[] answer = {};
        ArrayList<Integer> arr2 = new ArrayList<Integer>();

        if(arr.length <=1) {
            return new int[] {-1};
        }
          
        for(int i=0; i<arr.length; i++) {
              arr2.add(arr[i]);
        }

        int min = Collections.min(arr2);
        int index_of_min = arr2.indexOf(min);
        arr2.remove(index_of_min);
          
        answer = new int[arr2.size()];
          
        for(int i=0; i<arr2.size(); i++) {
            answer[i] = arr2.get(i);
        }

        return answer;
    }
}

 

=> ArrayList에서 Collections 사용법 익숙해지기

Collections.min()을 통해 ArrayList에 있는 최소값을 구 할 수 있고 indexOf(min)을 통해 index값도 구할 수 있다.


22. 짝수와 홀수

class Solution {
    public String solution(int num) {
        return num % 2 == 0 ? "Even": "Odd";
    }
}

23. 최대 공약수와 최소공배수

class Solution {
  public int[] solution(int n, int m) {
      int[] answer = new int[2];
      int temp=1;
      int gcd=n*m;
      
      while(temp!=0){
        temp=m%n;
        m=n;
        n=temp;
      }
      
      answer[0]=m;
      answer[1]=gcd/m;
      
      return answer;
  }
}

 

유클리드 호제법 사용.

 


24. 콜라츠 추측

class Solution {
    public int solution(int num) {
        int result = 0;
        long n=num;
        while (n != 1) {
            n = n % 2 == 0 ? n / 2 : n * 3 + 1;
            result++;
            if (result >= 500) {
                result = -1;
                break;
            }
        }
        
        return result;
    }
}

num의 수가 너무 크기때문에 long으로 바꿔주어야 한다는게 포인트.

 


25. 평균 구하기

class Solution {
    public double solution(int[] arr) {
        int sum = 0;
        double aver = 0.0;

        for (int n : arr) {
            sum += n;
        }
        aver = (double) sum / arr.length;
        
        return aver;
    }
}

방법 2) API 사용

class Solution {
    public double solution(int[] arr) {
        return (int) Arrays.stream(array).average().orElse(0);
    }
}

26. 하샤드 수

class Solution {
    public boolean solution(int x) {
        int arr=x;
        int sum = 0;
        boolean answer = true;

        while (arr > 0) {
            sum += arr % 10;
            arr /= 10;
        }
        answer = (x % sum == 0) ? true : false;
        
        return answer;
    }
}

방법 2) String 사용

public class HarshadNumber{
    public boolean isHarshad(int num){
    String[] temp = String.valueOf(num).split("");
    int sum = 0;
    
    for (String s : temp) {
        sum += Integer.parseInt(s);
    }

    if (num % sum == 0) {
            return true;
    } else {
      return false;
    }
    }

       // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void  main(String[] args){
        HarshadNumber sn = new HarshadNumber();
        System.out.println(sn.isHarshad(18));
    }
}

27. 핸드폰 번호 가리기

class Solution {
    public String solution(String phone_number) {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < phone_number.length(); i++) {
            if (i < phone_number.length() - 4) {
                sb.append("*");
            } else {
                sb.append(phone_number.charAt(i));
            }
        }
        
        return sb.toString();
    }
}

 


28. 행렬의 덧셈

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = new int[arr1.length][arr1[0].length];

        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[0].length; j++) {
                answer[i][j] = arr1[i][j] + arr2[i][j];
            }
        }
        
        return answer;
    }
}

29. x만큼 간격이 있는 n개의 숫자

class Solution {
    public long[] solution(long x, int n) {
        long[] answer = new long[n];

        for (int i=0; i< n; i++){
            answer[i]=x*(i+1);
        }
        
        return answer;
    }
}

x를 long으로 바꿔주는게 포인트..


30. 직사각형 별찍기

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        for (int i=0;i<b;i++){
            for (int j=0;j<a;j++){
                System.out.print("*");
            }
            System.out.println("");
        }
    }
}

31. 문자열 내림차순으로 배치하기

방법 1) 

import java.util.*;
class Solution {
    public String solution(String s) {
        String answer = "";
        String[] sArr = s.split("");
        Arrays.sort(sArr);
        List<String> list = Arrays.asList(sArr);
        Collections.reverse(list);

        sArr = list.toArray(new String[list.size()]);

        for (String ss : sArr) {
            answer+=ss;
        }
    
        return answer;
    }
}

방법 2)

import java.util.Arrays;

public class ReverseStr {
    public String reverseStr(String str){
    char[] sol = str.toCharArray();
    Arrays.sort(sol);
    return new StringBuilder(new String(sol)).reverse().toString();
    }

    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        ReverseStr rs = new ReverseStr();
        System.out.println( rs.reverseStr("Zbcdefg") );
    }
}
import java.util.Arrays;
public class ReverseStr {
    public String reverseStr(String str){
        char[] ch = str.toCharArray();
        Arrays.sort(ch);
        StringBuffer st = new StringBuffer(String.valueOf(ch));
        st.reverse();
        return  st.toString();
	}
}

32. 문자열 다루기 기본

class Solution {
    public boolean solution(String s) {
        if (s.length() !=4  && s.length() !=6){
            return false;
        }
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if ((int)ch > 57 || (int)ch <48){
                return false;
            }
        }
        return true;
    }
}
class Solution {
  public boolean solution(String s) {
      if(s.length() == 4 || s.length() == 6){
          try{
              int x = Integer.parseInt(s);
              return true;
          } catch(NumberFormatException e){
              return false;
          }
      }
      else return false;
  }
}