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
댓글