해당 포스팅은 이전 기수 프리코스 1주차 4번 문제를 풀어보았다.
이번 문제도 난이도는 높지 않았지만 어떻게 구현하냐가 핵심인 것 같다.
private static String solution(String word) {
Map<Character, Character> map = englishConversionMap();
StringBuilder sb = new StringBuilder();
for (char c : word.toCharArray()) {
boolean isUpperCase = Character.isUpperCase(c);
if (c == ' ') {
sb.append(c);
} else if (isUpperCase) {
sb.append(map.get(c));
} else {
Character upperCh = map.get(Character.toUpperCase(c));
sb.append(Character.toLowerCase(upperCh));
}
}
return sb.toString();
}
private static Map<Character, Character> englishConversionMap() {
Map<Character, Character> map = new HashMap<>();
for (char c = 'A'; c <= 'Z'; c++) {
char mappedChar = (char) ('A' + 'Z' - c);
map.put(c, mappedChar);
}
return map;
}
이 문제는 풀이 방법이 다양할 것 같다는 느낌이 들었다. 필자는 Map에 미리 영어사전을 제작해놓고 Character에서 제공하고 있는 함수를 이용하여 대소문자를 구분후 변환 과정을 거치는 형식으로 구현하였다.
역시 기능을 어떻게 분리해야 하는가? 가 핵심이였던 것 같다. 사전을 변환하는 작업은 기능을 분리하는 것이 좋고 간단하게 분리할 수 있었지만 StringBuilder를 이용해 대소문자를 구분해 새로운 단어를 만들어내는 과정이 어떻게 분리되어야 할지 난감했다.
이런 부분도 내가 발전해야 하는 부분이 아닐까 싶다 🥲