코테 합격을 위해서

컴개론·2024년 8월 1일

이슈 정의

코딩테스트에 떨어졌다는 것은 많은 개발자들이 겪는 문제 중 하나이다. 특히 알고리즘 문제를 틀려서 떨어지는 경우가 많다. 이 글에서는 코딩테스트에서 알고리즘 문제를 틀리는 원인과 그 해결 방법에 대해 다룬다.

issue example code

public class AlgorithmExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        int target = 9;
        boolean result = findPairWithSum(numbers, target);
        System.out.println('Pair found: ' + result);
    }

    public static boolean findPairWithSum(int[] numbers, int target) {
        for (int i = 0; i < numbers.length; i++) {
            for (int j = i + 1; j < numbers.length; j++) {
                if (numbers[i] + numbers[j] == target) {
                    return true;
                }
            }
        }
        return false;
    }
}

원인 추론

위의 코드에서 findPairWithSum 메서드는 두 숫자의 합이 주어진 타겟 값과 같은지 확인하는 알고리즘을 구현하고 있다. 그러나 이 알고리즘은 시간 복잡도가 O(n^2)로, 입력 배열의 크기가 커질수록 성능이 급격히 저하된다. 이는 코딩테스트에서 시간 초과로 이어질 수 있다.

해결 방법

효율적인 알고리즘을 사용하여 문제를 해결할 수 있다. 예를 들어, 해시맵을 사용하여 시간 복잡도를 O(n)으로 줄일 수 있다. 이는 각 숫자를 한 번만 순회하면서 필요한 값을 빠르게 찾을 수 있게 해준다.

solution example code

import java.util.HashMap;

public class AlgorithmExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        int target = 9;
        boolean result = findPairWithSum(numbers, target);
        System.out.println('Pair found: ' + result);
    }

    public static boolean findPairWithSum(int[] numbers, int target) {
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int number : numbers) {
            int complement = target - number;
            if (map.containsKey(complement)) {
                return true;
            }
            map.put(number, 1);
        }
        return false;
    }
}

위의 코드에서는 해시맵을 사용하여 각 숫자의 보수를 빠르게 찾을 수 있게 하였다. 이를 통해 시간 복잡도를 O(n)으로 줄여 코딩테스트에서 시간 초과 문제를 해결할 수 있다. 알고리즘 공부를 통해 다양한 문제 해결 방법을 익히는 것이 중요하다. 공식 문서와 알고리즘 책을 참고하여 꾸준히 공부하는 것이 필요하다.

0개의 댓글