본문 바로가기

알고리즘

입력받은 전화번호 뒷자리 중 가장 많이 입력된 뒷자리 번호를 출력하는 함수

import java.io.*;
import java.lang.*;
import java.util.*;


public class Main {
    public static final Scanner scanner = new Scanner(System.in);
    public static final int MAX_TABLE_LENGTH = 10000;
    public static int[] table = new int[MAX_TABLE_LENGTH];

    /**
     * data[0] ~ data[n-1]에 등장한 번호들에 대한 빈도수 테이블을 채우는 함수
     * @param data
     * @param n
     * @param table  table[x] := data배열에서 x가 등장한 횟수
     */
    public static void fillFrequencyTable(int[] data, int n, int[] table) {
        for(int i=0; i<n;i++){
            table[data[i]] = table[data[i]] + 1;
        }
    }

    /**
     * data[0] ~ data[n-1]사이에서 가장 많이 등장한 번호를 반환하는 함수
     * @param data
     * @param n
     * @return  가장 많이 등장한 번호. 여러개인 경우 사전순으로 가장 빠른 번호.
     */
    public static int getFrequentNumber(int[] data, int n) {

        fillFrequencyTable(data, n, table);
        int max = 0;
        int frequent_number = 0;

        for(int i = 0; i < n; i++){
            if(table[data[i]] > max){
                max = table[data[i]];
                frequent_number = data[i];
            }else if(table[data[i]] == max){
                frequent_number = data[i] > frequent_number ? frequent_number : data[i];
            }
        }
          //0000~9999중  가장 많이 등장한 번호
        return frequent_number;
    }

    public static void main(String[] args) throws Exception {
        int n = scanner.nextInt();
        int[] data = new int[n];
        for (int i = 0; i < n; i++) {
            data[i] = scanner.nextInt();
        }
        int answer = getFrequentNumber(data, n);
        System.out.printf("%04d", answer);
    }
}

10주 완성 알고리즘 코딩테스트 - goorm edu에서 들으실 수 있는 내용입니다.