1년 안에 개발자되기

코알못에서 억대 연봉 개발자가 될 수 있습니다.
매주 주어지는 코딩 테스트 문제와 자세한 설명으로
누구든지 할 수 있습니다. 기회를 놓치지 마세요!

구독하시고 13437명의 개발자와 함께하세요.

이용방법

  • 이메일로 구독을 합니다.

    코딩 문제를 받고 싶은 이메일로 구독을 합니다.

  • 문제를 이메일로 받습니다.

    매주 월요일 아침에 이메일로 문제와 자세한 풀이를 보내드립니다.

  • 문제를 풀어본 후

    실제 코딩 테스트 문제를 풀어보세요!

  • 풀이를 체크합니다.PREMIUM

    모든 문제는 코드 답변과 자세한 풀이가 있습니다.

샘플 문제 & 풀이

문제

정수 배열과 정수 k가 주어지면 모든 원소를 k칸씩 앞으로 옮기시오. Given an array, rotate the array to the right by k steps, where k is non-negative. input: [1, 2, 3, 4, 5], k=2 output: [3, 4, 5, 1, 2] input: [0, 1, 2, 3, 4], k=1 output: [1, 2, 3, 4, 0] 시간복잡도를 최대한 최적화 하시오.

풀이PREMIUM

이 문제는 배열을 거꾸로 3번 하면 답이 나옵니다. input: [1, 2, 3, 4, 5, 6, 7], k=3 output: [4, 5, 6, 7, 1, 2, 3] 1) 첫번째 k원소를 거꾸로 합니다. Time Complexity: O(k) ~= O(n) arr: [3, 2, 1, 4, 5, 6, 7] 2) 나머지 원소들을 거꾸로 합니다. Time Complexity: O(k) ~= O(n) arr: [3, 2, 1, 7, 6, 5, 4] 3) 배열 전체를 거꾸로 합니다. Time Complexity: O(k) ~= O(n) Total Time Complexity: O(3*n) = O(n)

void rotate(int[] arr, int k) {
  int n = arr.length;
  k %= n;
  reverse(arr, 0, k-1);
  reverse(arr, k, n-1);
  reverse(arr, 0, n-1);
}

void reverse(int[] noms, int start, int end) {
  while (start < end) {
    int temp = nums[start];
    nums[start] = nums[end];
    nums[end] = temp;
    start++;
    end—;
  }
}

축하드립니다

매일프로그래밍 유저들이 아래의 회사에서 오퍼를 받았습니다!

samsung naver google kakao nexon sk lg hyundai amazon facebook microsoft airbnb