본문 바로가기
TIL/Java 알고리즘 문제 풀이

23.06.11

by J1-H00N 2023. 6. 11.

점의 사분면을 알아내는 문제는 x좌표가 양수인지 음수인지, y좌표가 양수인지 음수인지만 구분하면 되기에 쉽게 풀었다.

public int solution(int[] dot) {
        int answer;
        if (dot[0] > 0) {
            if (dot[1] > 0) {
                answer = 1;
            } else {
                answer = 4;
            }
        } else {
            if (dot[1] > 0) {
                answer = 2;
            } else {
                answer = 3;
            }
        }
        return answer;
    }

 

다음 문제인 정수열에서 임의의 두 수를 뽑아 만들 수 있는 최댓값을 구하는 문제인데, 가장 큰 두 수와 가장 작은 두 수를 뽑아 각자 곱했을 때 더 큰 것이 최댓값이기에 이를 적용하려 했으나 두번째로 큰 수와 두번째로 작은 수를 구하는 과정에서 막히고, 어차피 number의 각 변수는 0 이상이므로 작은수의 곱을 구할 필요는 없었다. 각 숫자를 일일히 곱해봐서 가장 큰 값을 반환하도록 풀이를 바꿨다.

    public int solution(int[] numbers) {
        int answer = 0;
        for (int i = 0; i < numbers.length; i++) {
            for (int j = i+1; j < numbers.length; j++) {
                int max = numbers[i] * numbers[j];
                if (max > answer) {
                    answer = max;
                }
            }
        }
        return answer;
    }

 

그래도 아쉬움이 남아 number에 음수가 들어간다고 가정하에 코드를 다시 만들어봤다.

public int solution2(int[] numbers) { // 멤버에 음수도 들어간다면
        int max = numbers[0];
        int maxPrev = 0;
        for(int i = 1; i< numbers.length; i++){
            if (max < numbers[i]) {
                maxPrev = max;
                max = numbers[i];
            } else if (maxPrev < numbers[i]) {
                maxPrev = numbers[i];
            }
        }
        int maxMulti = max * maxPrev;

        int min = numbers[0];
        int minPrev = 0;
        for (int i = 1; i < numbers.length; i++) {
            if (min > numbers[i]) {
                minPrev = min;
                min = numbers[i];
            } else if (maxPrev > numbers[i]) {
                maxPrev = numbers[i];
            }
        }
        int minMulti = min * minPrev;
        System.out.println(maxMulti);
        System.out.println(minMulti);

        if (maxMulti > minMulti) {
            return maxMulti;
        } else return minMulti;
    }

음수가 들어가지 않는다면 maxMulti만 반환하면 된다.

 

각자 도전을 위해 풀어보기로 했던 문자열 안에 있는 숫자만 오름차순으로 배열하기는 문자열을 char[]형태로 바꿔 각 변수를 정수로 형변환하고 나서 9 이하면 ArrayList에 넣은 뒤 이 ArrayList를 int[]로 바꿔서 Array.sort로 정렬해 해결했다.

public int[] solution(String my_string) {
        ArrayList<Integer> numbers = new ArrayList<>();
        char[] stringArr = my_string.toCharArray();
        for (int i = 0; i < stringArr.length; i++) {
            int value = Character.getNumericValue(stringArr[i]);
            if (value <= 9) {
                numbers.add(value);
            }
        }
        int[] answer = new int[numbers.size()];
        for (int i = 0; i < numbers.size(); i++) {
            answer[i] = numbers.get(i);
        }
        Arrays.sort(answer);
        return answer;
    }

'TIL > Java 알고리즘 문제 풀이' 카테고리의 다른 글

23.06.18  (2) 2023.06.18
23.06.16  (0) 2023.06.16
23.06.07  (0) 2023.06.07
23.06.05  (0) 2023.06.05
23.06.03  (0) 2023.06.03