본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Insertion Sort-Part1

<sorting 문제>

https://www.hackerrank.com/challenges/insertionsort1/problem

 

Insertion Sort - Part 1 | HackerRank

Insert an element into a sorted array.

www.hackerrank.com

 

<문제>

<코드>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)

void insertsort(int size, int* arr) {
	int val = arr[size - 1], on = 0;
	for (int i = size - 1; i >= 0; i--) {
		if (val < arr[i - 1]) {
			arr[i] = arr[i - 1];
		}
		else {
			arr[i] = val;
			on = 1;
		}
		for (int j = 0; j < size; j++) {
			printf("%d ", arr[j]);
		}
		printf("\n");
		if (on == 1)
			break;
	}
}
int main(void) {
	int n = 0, i = 0;

	scanf("%d", &n);
	int* arr = (int*)malloc(sizeof(int) * n);

	for (i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}
	insertsort(n, arr);
	return 0;
}

 

<풀이>

1. 배열 arr의 크기인 n을 입력받아 arr 배열을 생성했다. 

2. insertsort() 함수를 정의했다.

  -배열의 크기 n과 배열 arr을 넘겨받고, arr[n-1]의 값, 즉 배열의 마지막 값을 val 변수에 저장한다. 

  -val값과 배열의 값을 하나씩 비교한다. 

  -비교했을 때, val 값보다 arr[i-1]값이 더 크면 arr[i]에 arr[i-1]값을 복사하고 printf를 통해 배열을 출력한다. 

  -val 값과 arr[i-1] 값이 같으면 arr[i]에 val 을 넣고 배열을 출력한 뒤 insertsort() 함수를 종료한다. 

 

<제출결과>