[HackerRank] Correctness and the Loop Invariant

아르당·2023년 12월 27일
0

HackerRank

목록 보기
55/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

문제

이전 챌린지에서 정렬되지 않은 배열에 Insertion Sort를 실행하는 코드를 작성했다. 그러나 이 코드가 올바른지 어떻게 확인할 수 있을까? 즉, 모든 입력에 대해 코드가 올바른 출력을 하는 방법은 어떻게 할까?

Constraints

  • 1 <= s <= 1000
  • -1500 <= V <= 1500
  • V ∈ arr

풀이

단순히 완성되어 있는 코드에서 틀린 부분을 찾아서 수정하면 된다. 이전 문제를 풀어봤다면 쉽게 찾을 수 있을 것이다.

// 수정 전
public static void insertionSort(int[] A){
	for(int i = 1; i < A.length; i++){
		int value = A[i];
		int j = i - 1;
		
        while(j > 0 && A[j] > value){
			A[j + 1] = A[j];
			j = j - 1;
		}
		
        A[j + 1] = value;
	}

	printArray(A);
}

// 수정 후
public static void insertionSort(int[] A){
	for(int i = 1; i < A.length; i++){
		int value = A[i];
		int j = i - 1;
		
        while(j >= 0 && A[j] > value){
			A[j + 1] = A[j];
			j = j - 1;
		}

		A[j + 1] = value;
	}

	printArray(A);
}

수정 전과 수정 후의 차이는 while문의 조건에서 찾을 수 있다. 0번 인자까지 비교하냐 안하냐의 차이가 있다.

profile
내 마음대로 코드 작성하는 세상

0개의 댓글