반응형
문제
알파벳으로만 이루어진 문자열이 주어질 때, 소문자는 대문자로, 대문자는 소문자로 변경한 문자열을 출력합니다.
질문
- 문자가 주어졌을 때, 소문자/대문자를 어떻게 판별할 수 있을까?
- 소문자(대문자)가 주어졌을 때 대문자(소문자)로 어떻게 바꿀 수 있을까?
제한
- 시간 제한: 1초
- 메모리 제한: 128MB
- 제출: 27404
- 정답: 20628
- 맞힌 사람: 18753
- 정답 비율: 76.288%
코드
public class ChangeUpperCaseLowerCase {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.next();
String result = "wRONGaNSWER"; // 기대하는 결과 값
// 방법 1
char[] ans1 = changeCaseMethod1(input.toCharArray());
String result1 = new String(ans1);
System.out.println("방법 1 결과: " + result1);
assert result1.equals(result) : "방법 1 실패";
// 방법 2
String ans2 = changeCaseMethod2(input);
System.out.println("방법 2 결과: " + ans2);
assert ans2.equals(result) : "방법 2 실패";
}
//이 메소드는 char 배열을 인자로 받아, 배열의 각 원소를 순회하면서 대소문자 변환을 수행합니다.
//ASCII 코드를 이용한 이 수학적 계산을 통해 대문자는 소문자로, 소문자는 대문자로 변환됩니다.
public static char[] changeCaseMethod1(char[] chars) {
for (int i = 0; i < chars.length; i++) {
if ('a' <= chars[i] && chars[i] <= 'z') // 현재 문자가 소문자인 경우, 이 조건이 참이 됩니다.
chars[i] = (char) ('A' + chars[i] - 'a'); // ASCII 값 차이만큼 문자에서 빼주고 'A'를 더해 대문자로 변환.
} else { // 현재 문자가 소문자가 아닌 경우, 즉 대문자인 경우에는 이 분기가 실행됩니다.
chars[i] = (char) ('a' + chars[i] - 'A'); // 수식을 통해 소문자로 변환합니다.
}
}
return chars;
}
// 이 메소드는 String을 인자로 받고, StringBuilder를 사용하여 결과 문자열을 구성합니다.
// StringBuilder를 사용하는 이유는 문자열의 변경이 빈번하게 일어나는 경우,
// 새로운 문자열 객체를 반복적으로 생성하지 않고 기존의 데이터를 수정하여 효율성을 높이기 위함입니다.
// 결과적으로, changeCaseMethod2는 문자열의 각 문자를 순회하면서 대소문자 변환을 적용하고, 최종적으로 변환된 문자열을 반환합니다.
// 이 방식은 Character 클래스의 유틸리티 메소드를 사용하여 문자의 대소문자를 판단하고 변환하는 방식입니다.
public static String changeCaseMethod2(String str) {
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) { // 입력 문자열의 각 문자를 순회합니다.
if (Character.isUpperCase(c)) { // 현재 문자가 대문자인 경우 소문자로 변환하고, 이를 StringBuilder 객체에 추가합니다.
sb.append(Character.toLowerCase(c));
} else if (Character.isLowerCase(c)) { // 현재 문자가 소문자인 경우 대문자로 변환하고, 이를 StringBuilder 객체에 추가합니다.
sb.append(Character.toUpperCase(c));
} else { // 현재 문자가 대문자도 소문자도 아닌 경우(숫자나 기호 등), 변환 없이 그대로 StringBuilder 객체에 추가합니다.
sb.append(c);
}
}
return sb.toString();
}
}
반응형