인프런 - 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 |