본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Equalize the Array

Equalize the Array | HackerRank

 

Equalize the Array | HackerRank

Delete a minimal number of elements from an array so that all elements of the modified array are equal to one another.

www.hackerrank.com

 

<문제>

input: 첫번째 줄에는 배열 arr의 크기를 입력받고, 두번째 줄에는 배열 전체를 입력받는다. 이 때, 배열 원소는 1부터 100 사이의 정수이다.

 

output: 배열 arr에 같은 원소들만 있게 할 때, 지워야 할 최소한의 원소 개수를 계산하고 화면에 출력한다.

 

<코드>

int equalizeArray(int arr_count, int* arr) {
    int arr_val[101]={0},max=0;
    for(int i=0;i<arr_count;i++) 
    {
        arr_val[arr[i]]++;
        if(arr_val[arr[i]]>max)
        {
            max=arr_val[arr[i]];
        }
    } 
    return arr_count-max;
}

 

<풀이>

삭제해야하는 원소의 개수를 최소한으로 하기 위해서는 배열 arr의 원소 중 같은 값이 각각 몇 개씩 있는지 알아내고, 가장 많은 값을 찾아 총 원소 개수에서 빼야할 것이다. 

먼저 원소의 값이 1부터 100 사이에 있으므로 원소 값을 저장하는 배열 arr_val[101]을 선언하고, 반복문을 통해 arr[i]의 값을 arr_val 배열에 저장하였다. 만약 arr_val[arr[i]]의 값이 현재 max값보다 크면 arr[i] 값을 가진 원소의 개수가 더 많다는 뜻이므로 max값을 바꾸었다. 

마지막에 총 원소 개수에서 max값을 빼서 문제를 풀 수 있었다.

 

 

<실행결과>

'c언어 스터디 > HackerRank' 카테고리의 다른 글

[HackerRank] Compare two linked lists  (0) 2021.08.14
[HackerRank] Repeated String  (0) 2021.08.14
[HackerRank] Left Rotation  (0) 2021.08.05
[HackerRank] Drawing Book  (0) 2021.07.27
[HackerRank] Utopian Tree  (0) 2021.07.27