문제 설명
알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수, …, my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 <= my_string의 길이 <= 1,000
입출력 예
my_string | result |
"Programmers" | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0] |
class Solution {
public int[] solution(String my_string) {
int[] answer = new int[52];
for (char c: my_string.toCharArray()) {
if(Character.isUpperCase(c)) {
answer[c - 'A']++;
} else {
answer[c - 'a' + 26]++;
}
}
return answer;
}
}
answer 배열을 생성합니다. 배열의 크기는 대소문자 개수를 모두 합친 52로 고정입니다.
for-each문에서 toCharArray 메소드를 이용하여 my_string을 char 배열로 변환한 뒤, 문자 c가 원소를 하나씩 받습니다.
if문에서 Character 클래스의 isUpperCase 메소드를 이용하여 문자 c가 대문자인지 아닌지 확인하고, 만약 맞다면 answer의 c - 'A'번째 원소가 1씩 증가합니다. 이는 아스키 코드를 활용하여 인덱싱하는 것입니다. 문자끼리의 계산은 char로 명시적 형변환이 없다면 숫자로 인식됩니다.
만약 대문자가 아니라면 소문자라는 뜻이므로(알파벳 대소문자로만 이루어진 문자열이기 때문에) answer의 c - 'a' + 26번째 원소가 1씩 증가합니다. 이 문제에서는 대소문자를 구분하고, 소문자의 위치는 대문자 뒤에 위치하고 있으므로 26을 더해주어 대문자와 소문자 간 간격을 유지합니다.
'프로그래머스 > Lv. 0(코딩 기초 트레이닝)' 카테고리의 다른 글
[프로그래머스 코딩테스트] 날짜 비교하기(Java) (0) | 2023.05.30 |
---|---|
[프로그래머스 코딩테스트] 무작위로 K개의 수 뽑기(Java) (0) | 2023.05.30 |
[프로그래머스 코딩테스트] 코드 처리하기(Java) (1) | 2023.05.28 |
[프로그래머스 코딩테스트] 글자 지우기(Java) (0) | 2023.05.27 |
[프로그래머스 코딩테스트] 세 개의 구분자(Java) (0) | 2023.05.27 |