[프로그래머스/C++ 문제 풀이] Lv. 0 - 최빈값 구하기

2024. 6. 29. 22:56·코딩테스트/프로그래머스 (Lv. 0)
728x90
반응형

문제 설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

제한 사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

입출력 예

array result
[1, 1, 2, 2] -1
[1] 1
[1, 2, 3, 3, 3, 4] 3

 

입출력 예 #1

  • [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.

입출력 예 #2

  • [1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.

입출력 예 #3

  • [1]에는 1만 있으므로 최빈값은 1입니다.

문제 풀이

이번 문제는 주어진 값들 중 최빈값을 찾고(1), 동일한 최빈값을 가지는 요소가 있는지 판별(2)하는 문제입니다.

 

저는 간단히 전체 값들이 저장될 수 있는 배열을 선언하여 모든 수를 순회하며 빈도수를 저장하고, 이후 해당 배열을 순회하며 최빈값과 중복된 최빈값의 수를 찾아주는 방식으로 문제를 해결하였습니다.

 

개인적으로 map 자료구조를 사용하면 더욱 쉽게 풀이가 가능할 것이라고 생각하고, 두 가지 방법 중 map이 아닌 배열을 통해 풀이하는 방식이 조금 더 복잡하다고 생각하여 풀이를 남기게 되었습니다.

정답 코드

더보기
#include <string>
#include <vector>

using namespace std;

const int SIZE = 1002;
int arr[SIZE];

int solution(vector<int> array) {
    int answer = 0;

    for (int num : array)
    {
        arr[num]++;
    }

    int mxIndex = 0;
    int mxValue = 0;
    int mxCount = 0;

    for (int num = 0; num < SIZE; num++)
    {
        // 만약 해당 숫자의 중복 값이 현재까지의 최대 값보다 크다면?
        if (arr[num] > mxValue)
        {
            // 현재 중복 값 갱신
            mxValue = arr[num];
            // 인덱스 저장
            mxIndex = num;
            // 카운트 초기화
            mxCount = 1;
        }
        // 만약 해당 숫자의 중복 값이 현재까지의 최대 값과 동일하다면?
        else if (arr[num] == mxValue)
        {
            // 카운트 증가
            mxCount++;
        }
    }

    if (mxCount > 1)
        answer = -1;
    else
        answer = mxIndex;

    return answer;
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 프로그래머스 (Lv. 0)' 카테고리의 다른 글

[프로그래머스/C++ 문제 풀이] Lv. 0 - 코드 처리하기  (0) 2024.07.01
[프로그래머스/C++ 문제 풀이] Lv. 0 - 배열 조각하기  (0) 2024.06.30
[프로그래머스/C++ 문제 풀이] Lv. 0 - OX퀴즈  (0) 2024.06.29
[프로그래머스/C++ 문제 풀이] Lv. 0 - 다음에 올 숫자  (0) 2024.06.25
[프로그래머스/C++ 문제 풀이] Lv. 0 - [PCCE 기출문제] 8번 / 창고 정리  (0) 2024.06.24
'코딩테스트/프로그래머스 (Lv. 0)' 카테고리의 다른 글
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 코드 처리하기
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 배열 조각하기
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - OX퀴즈
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 다음에 올 숫자
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    issac3d
    unrealengine
    fsoftobjectpath
    백준
    pcce 기출문제
    2018 kakao
    Algorithm
    후기
    구현
    tsoftobjectptr
    ai controller
    2022 kakao
    Summer/Winter Coding
    fruitspuzzle
    unity
    코딩테스트
    프로세스
    2019 kakao
    sesac
    청년취업사관학교
    delegate
    Unreal Engine
    project t.a develop
    c#
    프로젝트
    CS지식
    C++
    timelessadventure
    dataasset
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[프로그래머스/C++ 문제 풀이] Lv. 0 - 최빈값 구하기
상단으로

티스토리툴바