Fascination
article thumbnail

1. [문제]

 

Correctness and the Loop Invariant | HackerRank

How do you demonstrate the correctness of an algorithm? You can use the loop invariant.

www.hackerrank.com

 

 

2. [문제 설명]

- 주어진 삽입 정렬 코드를 수정하여 프로그램을 완성

- 주어진 삽입 정렬 코드

<c++ />
void insertionSort(int N, int arr[]) { int i,j; int value; for(i=1;i<N;i++) { value=arr[i]; j=i-1; while(j>0 && value<arr[j]) { arr[j+1]=arr[j]; j=j-1; } arr[j+1]=value; } for(j=0;j<N;j++) { printf("%d",arr[j]); printf(" "); } }

- N: 배열의 크기

- arr: 입력 받은 수를 저장할 배열

 

 

3. [문제 풀이]

- main에서 입력받은 N으로 배열의 크기를 할당 받는 식이 잘못되었으므로 동적할당을 이용하여 메모리를 할당해줌

- i보다 하나 작은 j의 값이 그 뒤 값인 i보다 작을 때 while을 반복해야 함

  > j>0 인덱스에 대한 조건식 수정

 

 

4. [코드]

<c++ />
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <assert.h> void insertionSort(int N, int *arr) { int i,j; int value; for(i=1;i<N;i++) { value=arr[i]; j=i-1; while(j>=0 && value<arr[j]) { arr[j+1]=arr[j]; j--; } arr[j+1]=value; } for(j=0;j<N;j++) { printf("%d",arr[j]); printf(" "); } } int main(void) { int N,i; scanf("%d", &N); int* arr; arr = (int*)malloc(sizeof(int)*N); for(i = 0; i < N; i++) { scanf("%d", &arr[i]); } insertionSort(N, arr); return 0; }

 

 

5. [실행결과]

'CODE > HackerRank' 카테고리의 다른 글

[C++] HackerRank : Simple Array Sum  (0) 2021.09.21
[C++] HackerRank : Diagonal Difference  (0) 2021.09.21
[C++] HackerRank : Time Conversion  (0) 2021.09.19
[C++] HackerRank : Left Rotation  (0) 2021.09.19
[C++] HackerRank : Mini-Max Sum  (0) 2021.09.12
profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!