[프로그래머스/C++] 최빈값 구하기

2024. 2. 4. 01:57·[ Computer Science ]/Algorithm_C++

0. 문제

풀이한 문제 - 최빈값 구하기 (프로그래머스 입문 / Lv.0 / 정답률 68%)

https://school.programmers.co.kr/learn/courses/30/lessons/120812

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 테스트 케이스 분석

테이블 하단 파란색 예시들은

문제에 제시된 테스트 케이스 이외에 내가 추가한 예시다

 

해당 문제에서는 1개 있든 여러 개 있든

가장 많은 개수의 숫자가 최빈값이고

최빈값이 여러 개면 -1을 리턴하고

최빈값이 하나면 그 값을 리턴하는 문제다

 

문제 자체는 정말 단순했는데

코테 연습이 많이 되어있지 않은 초보 상태라

구현하는 것에 어려움이 있었다

 

2. 코드 및 풀이

일단 입력 받은 벡터를 정렬부터 했다

sort 함수를 사용하기 위해 <algorithm> 라이브러리를 include 했다

 

sort 함수 사용방법 -> sort(시작주소,끝주소)

- 배열 : sort(arr, arr+arrSize);

- 벡터 : sort(v.begin(), v.end());

 

최빈값이 여러 개인 경우가 있을 수 있으니

최빈값들을 저장하는 modes 벡터를 선언했다

 

cnt 변수는 해당 수의 빈도를 저장하고

mode_cnt는 최빈값의 빈도,

before은 직전의 최빈값을 저장한다

 

벡터의 크기만큼 반복하는 반복문 내부에

조건문을 작성해서 최빈값을 찾았다

 

i == 0인 경우 벡터의 첫번째 인덱스 값이므로 

해당 값의 빈도인 cnt = 1,

첫번째 값이라 일단 이 값이 최빈값이니까

최빈값 저장 벡터인 modes 에 push back 하고

이전 벡터값 변수에도 해당 값을 저장하고

최빈값의 횟수 벡터에도 한 번이므로 1을 저장한다

 

 

벡터의 크기가 1인 경우만 있는 것이 아니니까

i != 0인 경우 최빈값을 구하는 과정을 조건문으로 작성했다

 

현재 최빈값의 횟수보다 지금 값의 횟수가 더 많다면

최빈값 갱신이 필요하다

이전에 저장해두었던 값은 더이상 최빈값이 아니게 되므로

modes 벡터를 초기화 시키고

지금 찾은 최빈값 (array[i]) 을 modes 벡터에 추가한다

현재 최빈값의 횟수 또한 지금 값의 횟수로 갱신해준다

 

값의 빈도가 모두 다른 경우만 있는 것은 아니고

최빈값과 빈도가 같은 숫자를 발견한 경우도 있을 것이다

현재 최빈값과 빈도가 같은 숫자라면 

이 값 또한 최빈값이므로 

modes 벡터에 추가한다

 

 

 

반복문이 끝난 후

저장된 최빈값들의 개수를 확인하기 위해

modes 벡터의 크기를 확인해보면

1인 경우는 최빈값이 하나이므로 그 값을 리턴하고

1이 아닌 경우는 최빈값이 여러 개인 것이므로 -1을 리턴한다

 

 

 

해당 게시글에 사용된 PPT 이미지는

모두 직접 제작했습니다

728x90

'[ Computer Science ] > Algorithm_C++' 카테고리의 다른 글

[백준/C++/Greedy] 11047 동전 0  (0) 2024.08.19
[백준/C++/Graph] 16928 뱀과 사다리 게임  (0) 2024.07.28
[백준/C++/DP] 1463 1로 만들기  (0) 2024.06.28
[프로그래머스/C++] 주사위 게임 3  (0) 2024.02.04
[프로그래머스/C++] 연속된 수의 합  (0) 2024.02.04
[프로그래머스/C++] 저주의 숫자 3  (0) 2024.02.04
[프로그래머스/C++] 유한소수 판별하기  (1) 2024.02.04
'[ Computer Science ]/Algorithm_C++' 카테고리의 다른 글
  • [프로그래머스/C++] 주사위 게임 3
  • [프로그래머스/C++] 연속된 수의 합
  • [프로그래머스/C++] 저주의 숫자 3
  • [프로그래머스/C++] 유한소수 판별하기
dev charlotte
dev charlotte
주 - 컴퓨터공학 / 복수 - 산업 보안
    250x250
  • dev charlotte
    int main() {
    dev charlotte
  • 전체
    오늘
    어제
    • 분류 전체보기
      • [ Laboratory ]
        • Paper review
        • Advanced Operating System
        • System Software & Storage
        • Lab etc
      • [ Computer Science ]
        • Algorithm_C++
        • Operating System
        • Information Retrieval
        • Database_sql
        • SW Engineering
        • Computer Network
        • JavaScript
        • Python
        • Data Structure
        • CS study
        • Distributed systems
      • [ Computer Security ]
        • Convergence Security
        • Web Security
        • PIMS
        • Network Security
        • Digital Finance
      • [ Artificial Intelligence ]
        • Trend
        • Seminar
      • [ 미래, 같이, LG ]
      • [ Development ]
        • [ Front-end ]
        • [ Back-end ] Spring 기본
        • [ Back-end ] Node.js
      • etc
        • 현대오토에버 스마트 모빌리티 공학 체험 교육
      • It's me
  • 블로그 메뉴

    • 링크

      • GitHub
    • 공지사항

    • 인기 글

    • 태그

      MySQL
      비전공자 코딩
      데이터베이스
      ssafy 13기
      SQL
      ACM
      공대생 대외활동
      코딩 인강
      오블완
      스마트모빌리티공학체험교육
      프로그래머스 코테
      코딩 교육
      대학생 대외활동
      현대오토에버
      프로그래머스 c++
      코드잇
      싸피 13기
      자바스크립트
      현대오토에버 스마트 모빌리티
      백준
      싸피
      소프트웨어 공학
      현대오토에버 스마트모빌리티
      SSAFY
      spdk
      프로그래밍 언어론
      프로그래머스 입문
      hotstorage
      티스토리챌린지
      프로그래머스
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    dev charlotte
    [프로그래머스/C++] 최빈값 구하기
    상단으로

    티스토리툴바