No.13 가장 많이 사용된 자릿수

Date:     Updated:

카테고리:

태그:

인프런에 있는 김태원님의 강의 IT 취업을 위한 알고리즘 문제풀이 with C/C++ 를 듣고 문제를 푼 후 정리한 오답노트입니다. 😀

9. 가장 많이 사용된 자릿수

문제 설명

어떤 자연수가 입력되면 자릿수 중 가장 많이 사용된 숫자를 출력한다.

  • ex) 123056565625 가 입력되면 4번으로 가장 많이 사용된 5가 출력된다.

  • 조건

    1. 자연수의 길이는 100을 넘지 않는다.
    2. 답이 여러개일 경우 그 중 가장 큰수를 출력.


해답

길이가 100인 자연수. 절대로 int, long 정수형으로 받을 수 없다.

  • 자연수를 문자열로 받아야함.
    • 각 자릿수를 char로 다룸
#include<stdio.h>
int ch[10];
int main(){
	//freopen("input.txt", "rt", stdin);
	int i, digit, max=-2147000000, res;
	char a[101];
	scanf("%s", &a);
	for(i=0; a[i]!='\0'; i++){
		digit=a[i]-48;
		ch[digit]++;
	}
	for(i=0; i<=9; i++){
		if(ch[i]>=max){
			max=ch[i];
			res=i;
		}
	}
	printf("%d\n", res);
	return 0;
}
  • a 배열 : 입력 받을 자연수 (문자열)
    • 최대 길이 100이므로 크기 101의 배열로 선언
  • ch 배열 : 0 ~ 9 자릿수를 나타낼 배열. 따라서 크기는 10
  • digit=a[i]-48
    • 48은 숫자 0의 아스키코드 값이다.
    • 자릿수 문자를 숫자로 변환해 int인 digit에 저장.
    • ch 각 0 ~ 9 숫자 나온 횟수 저장
  • if(ch[i]>=max)
    • >가 아닌 >=로 하면 max 값과 같기만 해도 최대 빈도로 나온 자릿수 i 를 저장하는 res가 갱신되므로 같은 max라도 가장 큰 i 를 출력하게 된다.
      • 조건 2 충족


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기