고을마을 : 나의 코딩 이야기

항해99 7기 6일차 TIL[JAVA 프로그래머스 알고리즘] 본문

항해99 7기/TIL(Today I Learned)

항해99 7기 6일차 TIL[JAVA 프로그래머스 알고리즘]

고을마을 2022. 5. 14. 23:30

2022년 5월 12일 항해 6일차

오늘도 어제와 같이 자바문법 공부, 조원들과 알고리즘을 풀어보는 시간을 가졌다.

 


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

문제 설명 : 

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

 

제한 조건 : 

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 0으로 시작하지 않습니다.

입출력 예 : 

예를들어 str이 1234이면 1234를 반환하고, -1234이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

 

public class number5 {
    int solution(String s) {
        return Integer.parseInt(s);
    }

    public static void main(String[] args) {
        number5 n = new number5();
        int solution = n.solution("777");
        System.out.println(solution);
    }
}

알고리즘 설명 :

1. 문자열을 숫자로 변형할 때 Integer.parseInt() 메소드를 사용. 문자열 s를 숫자로 변환하여 리턴해줬다.

(추가) Integer.parseInt() : String을 int 타입으로 반환,  Integer.toString(): int를 String 타입으로 반환.

 


6. 없는 숫자 더하기

문제 설명 : 

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

 

제한 조건 : 

  • 1 ≤ numbers의 길이 ≤ 9
    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.

입출력 예 : 

[1,2,3,4,6,7,8,0] 14
[5,8,4,0,6,7,9] 6

 

public class number6 {
    public int solution(int[] numbers) {
        //0~9의 합을 answer 변수에 넣어준다.
        int answer = 0+1+2+3+4+5+6+7+8+9;

        //numbers 배열을 반복문으로 돌려서 빼준다.
//        for(int i=0; i<numbers.length;i++){
        for (int i : numbers) {
            answer -= i;
        }
        return answer;
    }

    public static void main(String[] args) {
        number6 n = new number6();
        int solution = n.solution(new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8});
        System.out.println(solution);

    }
}

알고리즘 설명 :

1. 변수 answer에 0~9까지 더해줬다.

2. 배열 numbers를 for문을 통해 돌려준 후 배열 numbers에 있는 숫자들을 변수 answer에 빼주고 리턴했다.

 


7. 음양 더하기

문제 설명 : 

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

 

제한 조건 : 

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

입출력 예 : 

[4,7,12] [true,false,true] 9
[1,2,3] [false,false,true] 0

 

public class number7 {
    int solution(int[] absolutes, boolean[] signs) {
        int answer = 0;

        for (int i = 0; i < signs.length; i++) {
            if (signs[i]) {
                answer += absolutes[i];
            } else {
                answer -= absolutes[i];
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        number7 n = new number7();
        int solution = n.solution(new int[]{1, 2, 3}, new boolean[]{true, false, true});
        System.out.println(solution);
    }
}

알고리즘 설명 :

1. 답을 반환할 answer 변수를 0으로 초기화 시켜줬다.

2. for 문을 사용하여 변수 sum에 boolean signs 배열 원소의 값을 더했다.

3. boolean signs 배열 원소가 true면 absolute 배열 숫자를 더해주고,

                                               false면 absolute 배열 숫자를 빼줘서 answer를 반환했다.

 


8. 평균 구하기

문제 설명 :

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

 

제한 사항 : 

  • arr은 길이 1 이상, 100 이하인 배열입니다.
  • arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.

입출력 예 :

arr return
[1,2,3,4] 2.5
[5,5] 5

 

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

    public static void main(String[] args) {
        number8 n = new number8();
        double solution = n.solution(new int[]{1, 2, 3});
        System.out.println(solution);
    }
}

 

알고리즘 풀이 : 

1. 배열 arr의 합과 평균을 구할 변수 sum과 average를 double타입으로 초기화했다.

2. for 문을 사용하여 변수 sum에 arr 배열 원소의 값을 더했다.

3. 평균의 변수인 answer를 구하기 위해 배열 원소의 합 sum을 배열의 길이(arr.length)만큼 나눈 다음 average를 반환했다.

 


자바 문법이 익숙치않아서 알고리즘 문제도 한번에 확 보이지않는다.

다음주 화요일 알고리즘 모의고사와 

다음주 목요일 알고리즘 테스트를 대비해서 알고리즘 복습을 꼭 해야겠다.

자바 문법도 너무 어렵다. 특히 객체지향...

객체지향에 익숙해지려면 많은 과제를 풀어봐야하는걸까?

목요일까지 객체지향 과제도 제출해야하는데... 머리가 어질어질;;;;;

열심히 공부하다보면 익숙해지고 실력도 늘겠지.