프로그래머스 Java Lv.1 (1)

murphytklee·2023년 4월 29일
0
post-thumbnail

1. 직사각형 별찍기

https://school.programmers.co.kr/learn/courses/30/lessons/12969

import java.util.Scanner;

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 k=0;k<a;k++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

2. 짝수와 홀수 (if else)

https://school.programmers.co.kr/learn/courses/30/lessons/12937

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

3. 가운데 글자 모으기 ❓❗(substring, charAt)

https://school.programmers.co.kr/learn/courses/30/lessons/12903

class Solution {
    public String solution(String s) {
        String answer = "";
        //홀 수 일때
        if (s.length()%2 ==1){
            answer = String.valueOf(s.charAt(s.length()/2));
        } else {
            // 짝수일 때
            answer = s.substring(s.length()/2-1, s.length()/2+1);
        }
        return answer;
    }
}
  • 짝수 substring 사용할 때 왜 end index값이 s.length()/2+1이 되야하는가?
    • ex) 4/2+1은 3이고 abcd의 index(3)의 값은 d 아닌가?

    • → begin index값부터 가져오지만 end index 설정값 전까지만 가져온다.

      class Solution {
          public String solution(String s) {
              String answer = "";
              answer = (s.length()%2 ==1) ? String.valueOf(s.charAt(s.length()/2)) : s.substring(s.length()/2-1, s.length()/2+1);
              
              return answer;
          }
      }
  • 삼항 연산자로 풀어보기
    • 가벼운 로직을 처리한다면 if문보다는 삼항 연산자로 처리하는 것도 좋은 방법 가독성, 코드길이⬇️
    • 삼항 연산자를 사용하여 코드의 라인이 줄어들었다고 컴파일 속도가 빨라지는 것은 아니다
    • 오히려 이번경우는 가독성이 안좋아서 별로인듯

4. 두 정수 사이의 합

https://school.programmers.co.kr/learn/courses/30/lessons/12912

class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        if(a>b){
            for (int i=b;i<a+1;i++){
                answer = answer + b;
                b++;
            }
        } else if(b>a){
            for (int i=a; i<b+1 ;i++) {
                answer = answer + a;
                a++;
            }
        } else {
          answer = a;
        }
        return answer;
    }
}

5. 문자열을 정수로 바꾸기 ( Integer.parseInt() )

https://school.programmers.co.kr/learn/courses/30/lessons/12925

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

6. 없는 숫자 더하기 🔺

(https://school.programmers.co.kr/learn/courses/30/lessons/86051)

class Solution {
    public int solution(int[] numbers) {
        int answer = 45;
        for (int i : numbers){
            answer -= i;
        }
        return answer;
    }
}

7. 음양 더하기

https://school.programmers.co.kr/learn/courses/30/lessons/76501

class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 0;
        for (int i=0;i<absolutes.length;i++){
            if (signs[i]){
                answer = answer + absolutes[i];
            }
            else {
                answer = answer - absolutes[i];
            }
        }
            return answer;
    }
}

8. 평균 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/12944

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

9. 핸드폰 번호 가리기 ( repeat ) (substring) ❓❗

https://school.programmers.co.kr/learn/courses/30/lessons/12948

class Solution {
    public String solution(String phone_number) {
        String answer = "*".repeat(phone_number.length()-4);
        answer = answer + phone_number.substring(phone_number.length()-4, phone_number.length());
        return answer;
    }
}
  • Java에서 문자열 반복하는 메서드 repeat
  • char배열로 phone_number.length() -4 까지 *로 변환 후 다시 String.valueOf()로 변환

10. 행렬의 덧셈 ❓❗ (2중배열) ⭐

https://school.programmers.co.kr/learn/courses/30/lessons/12950

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = {};
        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;
    }
}
  • 왜 두번째 행렬을 [arr1[0].length];로 초기화 시켜야 하는지?
    • 뒷배열의 길이를 접근하기 위해서 ‘행’에 접근해야한다 = arr1[0]행의 열의 길이
  • 크기가 다른 두 배열의 덧셈이 가능한지? → 행렬과같이

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

https://school.programmers.co.kr/learn/courses/30/lessons/12954

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

12. 부족한 금액 계산하기 🔺

https://school.programmers.co.kr/learn/courses/30/lessons/82612

class Solution {
    public long solution(int price,long money, int count) {
        long answer = 0;
        
        for(int i=1;i<=count;i++){
            answer += price*i; 
        }
        if (answer>money){
                answer -= money;
        } else {
            answer = 0;
        }
        return answer;
    }
}
  • else (돈이 남는 경우에 0원을 출력)해야하기 한다.

13. 2016년 🔺

https://school.programmers.co.kr/learn/courses/30/lessons/12901

class Solution {
    public String solution(int a, int b) {
        String[] answer = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
        int[] months = {31,29,31,30,31,30,31,31,30,31,30,31};
        int days = 0;
        for(int i=1;i<a;i++){
            days += months[i-1];
        }
        days += b-1;
        
        return answer[days%7];
    }
}

14. 나누어 떨어지는 숫자 배열 🔺 ⭐

https://school.programmers.co.kr/learn/courses/30/lessons/12910

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = new int[arr.length];
        int index = 0;
        for(int i = 0; i < arr.length; i++) {
            if (arr[i] % divisor == 0){
                answer[index++] = arr[i];
			// 인덱스가 차례대로 쌓이고 arr.length로 지정해뒀기 때문에 나머지는 기본값인 0이 들어가게됨
			// ex) {5, 10, 0, 0}
            }
        }
        if (index == 0){
            return new int[]{-1};
        }
        answer = Arrays.copyOfRange(answer, 0, index);
        Arrays.sort(answer);
        return answer;
    }
}
  • 처음에는 int index = 0;을 지정해 두지 않은채 asnwer[i] = arr[i];로 설정했다.
    • 인덱스 [0]에 값을 넣고 [4]에 또 넣으면 [1][2] [3]에 해당하는 인덱스값이 초기값인 ‘0’이 담기는 이슈가 발생해 index를 카운트해주고 증가연산을 사용해서 해결했다.
  • Arrays.copyOfRange(복사할 원본 배열, 복사를 시작할 인덱스, 복사를 끝낼 인덱스)
    • 원본 배열이 입력한 길이보다 클 경우 입력한 길이 이후의 index는 제거되어 copy 된다.

0개의 댓글