문제
- 대문자와 소문자가 같이 존재하는 문자열을 입력받고, 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 문제이다.
입출력 예시
StuDY
sTUdy
풀이 1 : 유니코드 이용
public String solution(String word) {
StringBuilder sb = new StringBuilder();
for (char x : word.toCharArray()) {
if (x >= 65 && x <= 90) {
sb.append((char) (x + 32));
} else {
sb.append((char) (x - 32));
}
}
return sb.toString();
}
- Java의 문자형(char) 변수에는 실제 문자가 아닌 문자의 유니코드(정수)가 저장된다는 점을 이용한다.
- 문자 ‘A’ 의 유니코드는 65, 문자 ‘Z’의 유니코드는 90 이다. (90 - 65 + 1 = 26. 알파벳의 갯수)
- 문자 ‘a’ 의 유니코드는 97, 문자 ‘z’의 유니코드는 112 이다.
풀이 2 : Character.isLowerCase()
메서드 이용
public String solution2(String word) {
StringBuilder sb = new StringBuilder();
for (char x : word.toCharArray()) {
if (Character.isLowerCase(x)) {
sb.append(Character.toUpperCase(x));
} else {
sb.append(Character.toLowerCase(x));
}
}
return sb.toString();
}
Character.isLowerCase(char ch)
메서드는 문자가 소문자인지를 판단하는 메서드이다.
- 메서드의 결과값이 true이면,
Character.toUpperCase()
를 이용하여 문자를 대문자로 변환한다.
- 메서드의 결과값이 false이면,
Character.toLowerCase()
를 이용하여 문자를 소문자로 변환한다.
전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public String solution1(String word) {
StringBuilder sb = new StringBuilder();
for (char x : word.toCharArray()) {
if (x >= 65 && x <= 90) {
sb.append((char) (x + 32));
} else {
sb.append((char) (x - 32));
}
}
return sb.toString();
}
public String solution2(String word) {
StringBuilder sb = new StringBuilder();
for (char x : word.toCharArray()) {
if (Character.isLowerCase(x)) {
sb.append(Character.toUpperCase(x));
} else {
sb.append(Character.toLowerCase(x));
}
}
return sb.toString();
}
public static void main(String[] args) throws IOException {
Main sol = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String word = br.readLine();
System.out.println(sol.solution1(word));
}
}