Study/Baekjoon

Baekjoon1157: 단어 공부

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

<입력>
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
<출력>
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

 

추상화
1) 먼저 문자열을 대문자로 모두 바꾼다
2) 문자열에서 각 알파벳의 개수를 추출한다
   i) 아스키코드 A~ Z(65번~122번)을 이용
  ii) 각 알파벳의 개수를 담을 배열 생성(알파벳은 26개)
3) 가장 큰 알파벳의 개수를 추출한다
→반복문과 조건문을 통해 최대값을 구할 수 있다
4) 최대값의 수가 2개 이상인 경우 ?을 출력한다
→count 변수를 만들고 최대값이 겹칠 때마다 1을 증가시킨다
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
	   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	   int[] arr = new int[26];
//알파벳의 개수는 26개, 배열의 크기를 26개로 해준다
	   int max = 0;
//최대값 변수
	   int count = 0;
//최대값의 개수를 세어줄 count를 지정한다
	   char ch ='?';
//출력할 ch의 기본값은 ?이다
	   String s = br.readLine().toUpperCase();
//대문자로 바꿔준다
	   for(int i =0; i<26; i++) {
		   arr[i] = countChar(s,(char)(65+i));
	   }
//해당 문자열의 개수를 세어주는 메소드를 만들었고 반복문으로 적용했다

	   for(int i = 0; i<26; i++) {
		   if(arr[i]>max) {
			   max = arr[i];
			   ch = (char)(65+i);
			   count = 0;
		   }
		   if(arr[i]==max) {
			   count++;
		   }
//최대값을 구하고 같은 최대값을 만날 때마다 count가 증가한다
	   }
	   if(count ==1) {
		   System.out.println(ch);
	   }else { System.out.println('?');}
	}

private static int countChar(String s, char c) {
	int count = 0;
	for(int i =0; i<s.length(); i++) {
		if(s.charAt(i)==c) {
			count++;
		}
	}
	return count;
}
}
반복문을 합칠 수도 있다
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
	   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	   int[] arr = new int[26];
	   int max = 0;
	   char ch ='?';
	   int count = 0;
	   String s = br.readLine().toUpperCase();
	   for(int i =0; i<26; i++) {
		   arr[i] = countChar(s,(char)(65+i));
		   
		   if(arr[i]>max) {
			   max = arr[i];
			   count = 0;
			   ch = (char)(65+i);
		   }
		   if(arr[i]==max && arr[i] !=0) {
			   count ++;
		   }
	   }
	   if(count ==1) {
		   System.out.println(ch);
	   }else { System.out.println('?');}
	}

private static int countChar(String s, char c) {
	int count = 0;
	for(int i =0; i<s.length(); i++) {
		if(s.charAt(i)==c) {
			count++;
		}
	}
	return count;
}
}

'Study > Baekjoon' 카테고리의 다른 글

Baekjoon2941*: 크로아티아 알파벳  (0) 2021.10.11
Baekjoon5622: 다이얼  (0) 2021.10.11
Baekjoon2908: 상수  (0) 2021.10.10
Baekjoon1065: 한수  (0) 2021.10.09
Baekjoon4673: 셀프 넘버, 논리 배열과 StringBuilder의 사용  (0) 2021.10.08