4회차 - 알고리즘 기록 : 전화번호

2022. 6. 13. 19:25·TEAM STUDY/알고리즘 코딩 테스트 스터디
목차
  1. 📌전화번호
728x90
반응형

📌전화번호

 용돈이 필요해진 지수는 한 설문조사 기관에서 아르바이트를 하게 되었다.

지수는 수 많은 사람들에게 전화를 통해 설문조사를 하는 일을 맡게 되었는데, 어느 날 휴식시간에 문득 사람들이 전화번호 뒷자리로 가장 많이 사용하는 번호는 무엇인지 궁금해졌다.

하지만 지수는 보유한 전화번호가 너무 많고, 전화번호의 뒷자리는 0000~9999의 총 1만가지의 종류가 있기에 눈으로 세는 것은 도저히 불가능할 것이라는 판단을 내렸다.

지수를 위하여 사람들의 전화번호 뒷자리 중 가장 많이 사용되는 번호를 찾아주자.

 

 

입력 형식

 가장 첫 줄에 전화번호의 수 N이 1이상 10만 이하의 자연수로 주어진다.

그 후 총 N줄에 걸쳐서 공백없이 4개의 자연수로 구성 된 전화번호 뒷자리가 한 줄에 하나씩 주어진다.

전화번호 뒷자리는 0000~9999사이 중 하나이다.

 

출력 형식

 주어진 전화번호 뒷자리들 중 가장 많이 등장한 번호를 출력한다

0을 포함하여 공백없는 네 자리 숫자로 출력해야한다.

단, 등장한 횟수가 같은 번호가 두 개 이상인 경우 가장 사전순으로 빠른 숫자를 출력한다.

 

예시

- 입력

3

1234

4321

1234

 

 

- 출력

1234

 

생각 풀이

 

 

1차 코드 풀이

테스트는 통과인데, 제출에서 fail 와르르르 ~~~

다시풀어봐야지 ..

 

/**
 * num  : 찾아야 하는 수
 * data : 이 배열에서
 * 
 */
public static int fillFrequencyTable(int num, int[] data, int n) {
    for( int i = 0; i < n; i++ ) {
        if(data[i] == num) {
            return i;
        }
    }
    return -1;
}

public static int getFrequentNumber(int[] data, int n) {

    int maxFind = 0;

    int[] table = new int[n];

    for( int i = 0; i < n; i++ ) {
        int find = fillFrequencyTable(data[i], data, n);
        table[find] =  table[find] + 1;

        if(table[find] > maxFind) {
            maxFind = find;
        }else if(table[find] == maxFind) {
            maxFind = data[find] > data[maxFind] ? table[find] : maxFind;
        }
    }

    return data[maxFind];
}

 

2차 코드 풀이

테스트는 통과인데, 제출에서 fail 와르르르 ~~~

다시풀어봐야지 ..

public static int fillFrequencyTable(int num, int[] data, int n) {
    for( int i = 0; i < n; i++ ) {
        if(data[i] == num) {
            return i;
        }
    }
    return -1;
}


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

    // 제일 많이 등장한 수의 인덱스를 담아.
    int maxFind = 0;

    int[] table = new int[n];

    for( int i = 0; i < n; i++ ) {

        // data 에서 내가 보낸 데이터가 있다면 index 를 반환해
        int find = fillFrequencyTable(data[i], data, n);

        // find index 값을 하나 올려줘 ! 찾았으니깐 
        table[find] = table[find] + 1;

        // 내가 지금 찾은 값이 가지고 있던 대빵 인덱스보다 크다면 너가 대빵할 차례야.
        if(table[find] > maxFind) {
            maxFind = find;
        }
    }

    // 같은 것들 중에 제일 큰거
    int realsnMax = table[maxFind];

    for(int i = 0; i < n; i++) {
        if(table[i] == realsnMax) {
            if(data[i] > data[maxFind]) {
                maxFind = i;
            }
        }
    }

    return data[maxFind];
}

 

728x90
반응형
저작자표시 (새창열림)

'TEAM STUDY > 알고리즘 코딩 테스트 스터디' 카테고리의 다른 글

4회차 - 알고리즘 기록 : 응모  (0) 2022.06.13
4회차 - 알고리즘 기록 : 페인트  (0) 2022.06.13
3회차 - 알고리즘 기록  (0) 2022.06.08
2회차 - 알고리즘 기록  (0) 2022.06.03
1회차 - 알고리즘 기록  (0) 2022.05.21
  1. 📌전화번호
'TEAM STUDY/알고리즘 코딩 테스트 스터디' 카테고리의 다른 글
  • 4회차 - 알고리즘 기록 : 응모
  • 4회차 - 알고리즘 기록 : 페인트
  • 3회차 - 알고리즘 기록
  • 2회차 - 알고리즘 기록
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (932)
      • 개발중 (634)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (87)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (17)
        • 기록 (1)
        • 캐글 스터디 (3)
        • R (12)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    BackendDevelopment
    리눅스 마스터 요약
    리눅스 마스터 1급 요약
    redis
    네트워크 관리사 학점
    파이썬
    Git 저장소
    docker
    리눅스 마스터 1급 정리
    네트워크 관리사 2급
    파이썬 알고리즘
    네트워크 관리사 2급 실기
    Spring
    java
    스프링
    네트워크 관리사 실기
    쿠버네티스
    네트워크 관리사
    네트워크 관리사 요약
    네트워크 관리사 자격증
    REST API
    리눅스 1급 요약
    springboot
    알고리즘
    git
    jpa
    리눅스 마스터
    VUE
    리눅스 마스터 1급
    쿠버네티스 스터디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
4회차 - 알고리즘 기록 : 전화번호

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.