[프로그래머스 LV.1] - JAVA[0]

hybiis·2023년 2월 11일
0

프로그래머스 - JAVA

목록 보기
10/19
post-thumbnail

드디어 LV.1이다!! 더 열심히해서 3까지 가자 아자아자!

1. 자릿수 더하기

📖Q1.

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

✍A1.

import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        String strn=Integer.toString(n); //n을 int->String으로 변환
        String [] arr=strn.split("");
        //.split()을 이용하여 문자열 자르고 배열 생성
        //ex) n=123일 경우 split 이후 arr={1,2,3}으로 변환
        
        for(int i=0;i<arr.length;i++){
            answer+=Integer.parseInt(arr[i]);
            //더해주기 전에 Integer.pareInt() 이용하여String->int로 변환 시켜주기
        }
        return answer;
    }
}

✍A1-1.형변환 없이 while문을 이용한 풀이

import java.util.*;

public class Solution {
    public int solution(int n) { //n=123일 경우
        int answer = 0;

       while(true){
           answer+=n%10; //(1)asnwer+=3,(2)answer+=2,(3)=aswer+=1
           if(n<10){ //n이 10미만일때까지 while문 반복
               break;
           }
            n=n/10; //(1)n=12,(2)n=1  
       }
        return answer;
    }
}

2. 자연수 뒤집어 배열로 만들기

📖Q2.

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

✍A2.

class Solution {
    public int[] solution(long n) {        
        int length=Long.toString(n).length(); //answer 배열 길이
        int[] answer = new int[length];
    
        for(int i=0;i<length;i++){
            answer[i]=(int)(n%10);
            n/=10;
        }
        return answer;
    }
}

✍A2-1. reverse함수를 이용한 풀이

class Solution {
  public int[] solution(long n) {
      String s = Long.toString(n);
      StringBuilder sb = new StringBuilder(s);//StringBuilder를 이용해 객체 생성
      sb = sb.reverse();//문자열 뒤집기
      String[] ss = sb.toString().split("");

      int[] answer = new int[ss.length];
      for (int i=0; i<ss.length; i++) {
          answer[i] = Integer.parseInt(ss[i]);
      }
      return answer;
  }
}

3. 평균 구하기

📖Q3.

정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.

✍A3.

class Solution {
    public double solution(int[] arr) {
        double answer = 0;
        double sum=0;
        for(int i=0;i<arr.length;i++){
            sum+=arr[i];
        }
        answer=sum/arr.length;
        return answer;
    }
}

4. 문자열 내 p와 y의 개수

📖Q4.

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.
예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

✍A4. 너무 부끄러운 내 코드..🥲

class Solution {
    boolean solution(String s) {
        String arr[]=s.split("");
        int countp=0;
        int county=0;
        
        for(int i=0;i<arr.length;i++){
            if(arr[i].equals("p") || arr[i].equals("P")){
                countp++;
            }else if(arr[i].equals("y") || arr[i].equals("Y")){
                county++;
            }
        }        
        if(countp==county){
            return true;
        }else{
            return false;
        }
    }
}

✍A4-1. 너무 멋지고 깔끔한 코드

class Solution {
    boolean solution(String s) {
        s = s.toUpperCase(); //uppercase를 이용해 대문자로 변환

        return s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count();
        
    }
}

5. 정수 제곱근 판별

📖Q5.

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

✍A5. 비효율의 끝판왕인 내 코드

import java.util.*;
class Solution {
    public long solution(long n) {       
        double result=Math.sqrt(n);//sqrt를 이용해 제곱근 구하기
        double a=Math.pow((result+1),2); //제곱일 시 return값
        double k=Math.floor(result);
        double b=result/k; 
        
        if(b==1.0){
            return (long)(a);
        }else{
            return -1;
        }    
    }
}

✍A5-1. 내가 원한 코드^___^...

class Solution {
  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;
  }
}

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

📖Q6.

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

✍A6.

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        
        for(int i=1;i<=n;i++){
            answer[i-1]=i*(long)(x);
        }
        /*테스트 케이스 13,14에 계속 오류가 발생해서 왜인가 했는데 
        'n이 1000이라고 한다면 100억이기 때문에 int 안에 못 담겨서 -로 부동소수점이 
        돌아버려서 마이너스가 된 후 long 타입인 answer에 담기기 때문인 것 같아요.' 
        라는 답변을 보고 x를 long타입으로 변환해주었다.*/
        return answer;
    }
}

7. 문자열을 정수로 바꾸기

📖Q7.

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

✍A7.

class Solution {
    public int solution(String s) {
        int answer = 0;
        int result=Integer.parseInt(s);
         
        return result;
    }
}

8. 정수 내림차순으로 배치하기

📖Q8.

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

✍A8.

import java.util.*;
class Solution {
    public long solution(long n) {
        String[] list = String.valueOf(n).split("");
        Arrays.sort(list); //sort를 이용해 오름차순 정렬
 
        StringBuilder sb = new StringBuilder();
        for (String aList : list) sb.append(aList);
 
        return Long.parseLong(sb.reverse().toString());//reverse를 이용해 문자열 반전
        
    }
}

9. 나머지가 1이 되는 수 찾기

📖Q9.

자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.

✍A9.

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i=1;i<n;i++){
            if(n%i==1){
                answer=i;
                break;
            }
        }
        return answer;
    }
}

10. 하샤드 수

📖Q10.

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

✍A10.

class Solution {
    public boolean solution(int x) {
        int k=x;//while문에 의해 x의 값이 변경되므로 다른변수에 x값 저장
        int sum=0;
        
        while(x>0){
            sum+=x%10;
            x=x/10;
        }//각 자릿수 합     
        if(k%sum==0){
            return true;
        }else{
            return false;
        }        
    }
}
profile
초보 개발자

0개의 댓글