티스토리 뷰

인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다.

 

입력예제 

1230565625

 

출력예제

5

풀이 

알아야 할 지식

- 자연수의 길이가 100이기 때문에 int형으로 입력이 아닌 char형으로 입력을 받음

- 문자열의 마지막까지 반복 > 널문자를 만날때까지 :  ( arr[i] != '\0')

- 전역 배열로 선언 시 모든 값이 0으로 초기화

- max값은 -274000000으로 초기화

 

풀이법

- 카운팅 배열 생성 후 해당 인덱스의 카운트를 업데이트

- 카운팅 배열에서 가장 많이 카운팅 된 index를 찾는다 > ch[i]의 값이 아닌 i의 값이어야 함

- 답이 여러개일 경우, 가장 큰 수인 인덱스을 찾아야 함 >  max <= ch[i]

 

 

[예시]

char a[101] = "1230565625"

ch[10]

0 1 2 3 4 5 6 7 8 9
1 1 2 1   3 2      

 

코드

#include <iostream>
using namespace std;

int ch[10]; //전역변수기 때문에 0으로 초기화

int main() {
    //자연수는 100이하이기 때문에 int형으로는 읽을 수 없음
    char a[101]; //입력받는 수를 담을 배열
    int i, tmp, res, max = -2147000000; //최댓값 변수
    
    cin >> a;
    
    for(i = 0; a[i] != '\0'; i++){
        tmp = a[i]-48; //char에서 가져오기 때문에 아스키를 int로 변환하는 -48이 필요
        ch[tmp]++;
    }
    
    for(i = 0; i <= 9; i++){
        if(max <= ch[i]){
            max = ch[i]; //ch[i]는 사용된 횟수
            res = i; //실제 결과값은 i
        }
    }
    cout << res;
    
    
    return 0;
}

'알고리즘' 카테고리의 다른 글

19. 분노유발자  (0) 2020.04.17
18. 층간소음  (0) 2020.04.17
STL과 Vector&iterator  (0) 2018.09.02
[2440/2441] 별찍기 3-4  (0) 2018.05.11
[2438/2439] 별찍기 1-2  (0) 2018.05.11
최근에 올라온 글
Total
Today
Yesterday