codility 4

[Codility] PermMissingElem

분석 문제는 워낙 간단하고 쉽다. 단 해당 문제의 Lesson 주제가 Time Complexity인 만큼 시간 복잡도를 최소화하는 것이 문제의 의도로 보인다. 가장 쉽게 떠올릴 수 있는 방법은 N개의 크기 배열 A를 받았을 때 (1부터 N+1)까지의 숫자를 전부 Hash의 Key로 넣고 하나씩 Remove 하는 것이다. 이렇게 하면 가장 마지막에 남는 Key가 답이 된다. 하지만 이 방법은 Hash에 넣는데 N+1번, 그리고 A배열을 순회하며 찾는데 N번 걸리므로 O(n^2)이다. O(N)으로 끝낼 수 있는 방법은 배열을 딱 한 번만 순회하는 것이다. 처음 A 배열을 받으면 1~N+1 숫자의 합을 구한다. 그리고 A 배열을 순회하면서 합에서 값을 한 개씩 뺀다. 이렇게 하면 없는 숫자는 뺄 수 없으므로 ..

Algorithms 2022.02.28

[Codility] OddOccurrencesInArray

제약사항 N is an odd integer within the range [1..1,000,000]; each element of array A is an integer within the range [1..1,000,000,000]; all but one of the values in A occur an even number of times. 간단한 문제다. A에 들어가는 값이 1~10억이므로 배열의 인덱스와 동일하게 처리하기엔 사이즈가 너무 큼 그래서 Hash를 이용해서 발생한 숫자를 Key로, 발생한 횟수를 Value로 사용함 그리고 2로 나눈 나머지가 0이 안되는 것이 홀수번 발생한 것이므로 해당 숫자를 답으로 리턴 Code class Solution { public int solution(in..

Algorithms 2022.02.26

[Codility] CyclicRotation

예외사항을 생각해야 한다. Empty array, input 배열의 크기보다 rotation 횟수가 더 클때, K가 0일 때 등을 추가 테스트 케이스로 넣어준다 Additional Test Case ([], 3) ([1,2,3,4], 5) ([1,2,3,4], 0) Code class Solution { public int[] solution(int[] A, int K) { int[] res = new int[A.length]; // K 값이 A 배열의 길이보다 클 때 중복해서 rotation 하는 것이므로 나머지를 대입 if (A.length != 0 && K > A.length) { K = K % A.length; } // A배열의 크기가 K와 동일하면 로테이션 필요 없음 // A배열의 크기가 0이거..

Algorithms 2022.02.24