
내가 생각했을때 문제에서 원하는부분
알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.
내가 이 문제를 보고 생각해본 부분
Main43 클래스의 main 메서드는 프로그램의 시작점이며, 여기서 Solution7 클래스의 solution 메서드를 호출한다.
solution 메서드는 입력 문자열을 받아서 길이 52짜리 배열을 만든다. 배열의 0~25번 인덱스는 대문자 'A'부터 'Z'까지, 26~51번 인덱스는 소문자 'a'부터 'z'까지 각각의 개수를 저장한다.
문자열의 각 문자를 한 글자씩 검사한다. 문자 ch가 대문자면 'A'의 아스키 코드 값을 빼서 인덱스를 결정하고, 그 위치의 값을 1 증가시킨다.
만약 소문자라면 'a'의 아스키 코드 값에서 빼고 26을 더해 인덱스를 구해서 그 위치의 값을 1 증가시킨다.
이렇게 모든 문자를 검사한 후, 결과 배열을 호출한 쪽으로 반환한다.
main에서는 반환된 배열을 받아서 각 알파벳의 개수를 공백으로 구분해 출력한다.
코드로 구현
class Solution {
public int[] solution(String my_string) {
int[] answer = new int[52];
for (int i = 0; i < my_string.length(); i++) {
char ch = my_string.charAt(i);
if (ch >= 'A' && ch <= 'Z') {
answer[ch - 'A']++;
} else if (ch >= 'a' && ch <= 'z') {
answer[ch - 'a' + 26]++;
}
}
return answer;
}
}
프로그래머스 코드
package programmers;
// 프로그래머스 문자 개수 세기
public class Main43 {
public static void main(String[] args) {
Solution7 sol = new Solution7();
String my_string = "Programmers";
int[] result = sol.solution(my_string);
// 결과 출력
for (int count : result) {
System.out.print(count + " ");
}
System.out.println();
}
}
// Solution 클래스에 문제 해결 메서드 작성
class Solution7 {
public int[] solution(String my_string) {
int[] answer = new int[52];
for (int i = 0; i < my_string.length(); i++) {
char ch = my_string.charAt(i);
if (ch >= 'A' && ch <= 'Z') {
answer[ch - 'A']++;
} else if (ch >= 'a' && ch <= 'z') {
answer[ch - 'a' + 26]++;
}
}
return answer;
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.