반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-19 00:03
관리 메뉴

ImJay

[C언어] 백준 1157번 : 단어 공부 본문

백준 - C, C++/07. 문자열

[C언어] 백준 1157번 : 단어 공부

ImJay 2020. 10. 20. 00:00
반응형

백준 1157번 : 단어 공부

- 사용언어 : C언어

www.acmicpc.net/problem/1157

1. 문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

2. 코드

#include <stdio.h>
#include <limits.h>
#include <string.h>

#define num 1000001

int main(void) {
	
	char apb[num]; 
	
	int count[123] = {0,};
	
	int max = INT_MIN;
	
	int max_apb, div=0, len;
	
	scanf("%s", apb);
	
	len = strlen(apb);
	
	for(int i=0; i<len; i++) {

		for(int ascii=65; ascii < 91; ascii++) if(ascii==apb[i]) count[ascii]++;
		
		for(int ascii=97; ascii < 123; ascii++) if(ascii==apb[i]) count[ascii-32]++;
		
	}
	
	for(int ascii=65; ascii<91; ascii++)
	if(count[ascii] > max) {
		max = count[ascii];
		max_apb = ascii;
	}
	
	for(int ascii=65; ascii<91; ascii++) if(max == count[ascii]) div++;
	
	if(div > 1) printf("?");
	else printf("%c", max_apb);
	
}

3. 풀이

조잡합니다 !! 저랑 비슷한 방향으로 짜신 분만 참고해주세요 ㅠㅠ 절대 좋은 코드가 아닙니다.


문제에서 가장 많이 사용된 알파벳을 구하므로,

 

입력한 문자를 아스키코드와 비교하여 일치할 시 count해줍니다.

 

이 때, 알파벳 순서대로 count[0]은 A의 갯수로 세주었습니다.

 

대소문자 구분을 하지 않기 때문에 소문자일 경우 -32를 해주어 대문자와 통일시켜 세주었습니다.

 

다음은 최대최소 구분하는 스크립트를 배웠기 때문에 같은 방법으로 max를 구해줍니다.

 

그리고 ! 가장 많이 사용된 알파벳이 여러개일 경우 , div++로 구분을 해주었습니다.

 

마지막 출력에서 div가 1보다 클 경우, 아닐 경우로 문제에서 원하는 출력을 해주었습니다.

반응형
Comments