본문 바로가기
Programming/Algorithm

알파벳 빈도 구하기(JAVA)

by minux_s 2021. 5. 23.
728x90

이번에 어떤 기업의 코딩 테스트를 보면서 출제된 문제로 문자열 안에서 각 알파벳이 몇 번 나오는지 빈도를 구하여 출력하는 문제가 나왔습니다.

나름 깔끔(?)하게 푼 것 같아서 공유 해봅니다!

 

문제: 입력된 문장에 포함된 알파벳의 빈도를 구하고 출력하다. 단, 대소문자 구분은 하지 않는다

 

입력예시: abcd

출력예시: 

a : 1

b : 1

c : 1

d : 1

e : 0

f : 0

.

.

.

z : 0

 

해당 문제는 JAVA로 풀이했습니다

import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input = br.readLine();
		input = input.replace(" ", "");   //공백 제거
		input = input.toLowerCase();       //대소분자 구분 없으므로 전부 소문자로 치환
		char[] chr = input.toCharArray();           //아스키값으로 확인하기 위한 char 배열
		int[] cnt = new int[26];               //각 알파벳 갯수 저장할 배열

		for(int i=0; i<chr.length;i++) {     //각 글자 별 아스키값 -97로 해당위치 갯수 up
			cnt[(int)chr[i]-97] = cnt[(int)chr[i]-97] +1;
		}

		for(int j=0;j<cnt.length;j++) {    //출력
			System.out.println((char)(j+97)+" : "+cnt[j]);
		}
	}
}

1. 문자열에서 공백을 제거한 후

2. toLowerCase()를 통해서 모두 소문자로 바꿉니다

3. 문자열을  char[]로 변환한 후에

4. ascii 값을 이용하여 해당 위치 값을 1씩 증가시킵니다.

 

input 및 변수 설정한 부분을 제외하면 for문 2번으로 출력까지 끝났네요 ㅎㅎ 

728x90

댓글