1년 안에 개발자되기

안녕하세요 매일프로그래밍 이용자 여러분
여태 이용해 주셔서 정말 감사드립니다. 정말 많은 관심 덕분에 여기까지 오게 되었습니다. 앞으로 더 좋은 서비스를 위해 재정비 기간을 가지기로 했습니다.
앞으로 새로운 가입과 유료 결제를 더 이상 안받겠습니다.
이미 결제중인 회원분들의 자동결제는 모두 취소되며 구매하신 유료 기간이 지나면 자동으로 구독이 끝나십니다.
감사합니다 매일프로그래밍

이용방법

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

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

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

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

  • 문제를 풀어본 후

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

  • 풀이를 체크합니다.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