신박하게 푼 것 같은 문제,,지만
어쨌든 풀었습니다?
알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.
출처: https://school.programmers.co.kr/learn/courses/30/lessons/181902
import java.util.*;
class Solution {
public int[] solution(String my_string) {
int[] answer = new int[52];
Map<Character, Integer> mapping = new HashMap<>();
for (int i = 0; i < my_string.length(); i++) {
mapping.put(my_string.charAt(i), mapping.getOrDefault(my_string.charAt(i), 0) + 1);
}
for (Character c : mapping.keySet()) {
if (Character.isUpperCase(c)) answer[c - 65] = mapping.get(c);
else if (Character.isLowerCase(c)) answer[c - 97 + 26] = mapping.get(c);
}
return answer;
}
}
1) 수업시간에 배운 HashMap 야무지게 써먹기.
주어진 my_String의 char를 한 개씩 돌면서 세준다.
Map에는 알파벳이 key로, 반복 횟수가 value로 들어간다.
2) 그 다음, ascii 코드 값을 활용해서 대문자일 경우, A의 value값은 인덱스 0에 들어갈 수 있도록, 소문자일 경우, a의 value값은 인덱스 26에 들어갈 수 있도록 각 숫자를 빼준다.
이것도 지난 번 풀다가 잘 안 풀려서 아껴둔 문제였다.
다시 푸니까 되더라!!
모르겠어서 풀이를 찾아보는 짓은 하지 않을거댜 아마
문제가 아까우니까 ~🤓