[Java]goorm test(구름TEST) 알고리즘 algorithm 알파벳 빈도 구하기
안녕하세요 Leo 입니다.
이번 소개해줄 알고리즘 사이트는 구름TEST 라는 사이트 인데요,
NHN에서 투자 받아 개발한 알고리즘 사이트 입니다.
회사면접 코딩테스트를 하는 유명한 사이트죠...
저는 IOS (Object-c , Swift) 위주로 개발을 하고 가끔 안드로이드 개발을 하는데요...
회사에서 Java 로 코딩테스트를 하라고 해서 ... 하라면 해야죠... 풀어봤습니다.
제가 20문제 이상 푼것 같은데 이걸 공유 해드리도록 하죠...
이 글이 누군가에겐 "약"이 되고 누군가에겐 "독"이 될 것이다.
개발자라면 적어도 기본 알고리즘 정도는 스스로 학습하여 풀어봐야 한다.참고로 코딩테스트 문제를 제출 한 심사위원 분도제 블로그에서 답을 확인 한다는 것을 역으로 알아두고 보세요!! ㅎㅎ
알고리즘 문제
문제 : 이 문제는 입력된 문장에 포함된 알파벳의 빈도를 구하고 출력하는 것이 목표입니다. 대소문자 구분없이 알파벳의 빈도를 구하는 프로그램을 작성하십시오.
입력
임의의 문장(최대 80자)
출력
알파벳 별 빈도 수
입/출력 예시
⋇ 입출력 형식을 잘 지켜주세요.
␣ : 공백
↵ : 줄바꿈
−⇥ : 탭
보기 입력 1
edu goorm io
출력 1
a : 0
b : 0
c : 0
d : 1
e : 1
f : 0
g : 1
h : 0
i : 1
j : 0
k : 0
l : 0
m : 1
n : 0
o : 3
p : 0
q : 0
r : 1
s : 0
t : 0
u : 1
v : 0
w : 0
x : 0
y : 0
z : 0
======================================================================================================
풀이
======================================================================================================
//Please don't change class name 'Main'
import java.util.Scanner;
import java.util.Arrays;
//생각하고 문제를 풀어보자 나의 논리는.
//1. 아스키 코드의 알파벳 자리를 생각한다.
//아스키 소문자 a - z (97-122) 이걸 반복문에 적용
//총 30개 영문자
//입력된 문자를 아스키 코드로 바꾸고 같은 숫자를 구한다.
//인터넷 검색하지 말고 직접하자!
//대소문자 구분없이 가 중요포인트
//equals 는 대소문자 구분함.
//equalsIgnoreCase 사용하면 대소문자 구분 없음 예전 Java 할때 개고생한거 기억남.
class Main {
public static void main(String[] args) {
String message;
Scanner scan = new Scanner(System.in);
message = scan.nextLine();
message = message.replace(" ", "");//공백 제거
String[] abcArray = message.split("");
String outputValue = "";
//a = 97 ~ z = 122
for(int j=0; j < abcArray.length; j++){
String alphabet = abcArray[j];
alphabet = alphabet.toLowerCase(); //대소문자 무조건 소문자로 치환
char[] charAbc = alphabet.toCharArray(); //String char로 형변환
//같은 알파벳 아스키 코드를 찾는다.
for(int i=97; i <= 122; i++){
if(i == ((int) charAbc[0])){
//같은 값을 string에 ,로 저장한다.
outputValue = outputValue + "," + Integer.toString(i);
}
}
}
//, 저장한 값을 split으로 나눠서 배열을 만든다.
String[] tryabcArray = outputValue.split(",");
//a-z 까지 문장을 만들면서 같은 값을 비교하여 개수를 센다.
for(int i=97; i <= 122; i++){
int count = 0;
for(int j=0; j < tryabcArray.length; j++){
//딱한 a-z까지 만들면서 같은 string값을 비교해서 같은 값이면 ++ 를 해준다.
if(tryabcArray[j].equals(Integer.toString(i))){
count++;
}
}
System.out.println(Character.toString ((char) i) +" : " + count);
}
}
}
참고로 저는 알고리즘 풀이 점수는 높은 점수는 아닙니다.
일단 푸는 거에 집중했습니다. 알고리즘에 정답은 없습니다.
더 좋은 알고리즘을 만들어 내는게 목표 입니다.
알고리즘에 대하여 더 이야기 하실분은 댓글남겨주세요!
구름TEST 화면
구름TEST - 개발자 채용을 위한 코딩 테스트, 프로그래밍 시험
구름TEST는 LG전자, 라인, NHN, 스마일게이트 등에서 활용 중인 온라인 코딩 테스트 서비스입니다. 부서별, 직군별 시험 관리부터 문제 제작, 관리 기능과 응시자 초대 기능 등 개발자 채용을 위한 모든 기능을 제공합니다.
codingtest.goorm.io
구름테스트, 구름TEST 가 지원하는 프로그래밍 언어
그 외 Scala, Pascal, Lua, Objective-C, Rust, Cobol, Clojure, Smalltalk, Dart, Haskell, Perl, Common Lisp, D, Erlang 등
구름테스트, 구름TEST 를 2019년 현재 적용중인 회사