백준
[백준] 2744번 : 대소문자 바꾸기 - Java
주니5947
2025. 1. 5. 19:07
https://www.acmicpc.net/problem/2744
- 문제
- 풀이
- 각 문자의 아스키 코드표에서 차이를 기준으로 직접 대소문자 바꾸기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int N = str.length();
for (int i = 0; i < N; i++) {
char ch = str.charAt(i);
if ((ch-'a') < 0) {
ch = (char)(ch+(int)('a'-'A'));
}
else
ch = (char)(ch-(int)('a'-'A'));
System.out.print(ch);
}
br.close();
}
}
먼저 아스키 코드표 상에서 소문자는 대문자 뒤에 위치한다는 점은 알고 있다는 전제 하에 문제를 풀었다.
ch - 'a'가 0보다 작게 되면 a보다 앞에 위치한 문자이므로 대문자, 아닐 경우 소문자라고 판단할 수 있다.
또한 모든 대문자와 소문자 사이의 차이는 같으므로 'a' - 'A'를 통해 대문자와 소문자 간의 차이를 숫자로 표현할 수 있다.
대문자는 이 차이를 더해서 소문자로, 소문자는 이 차이를 빼서 대문자로 바꾸면 답을 구할 수 있다.
만 이렇게 복잡하게 할 필요없이 메소드를 활용하면 훨씬 쉽게 풀 수 있다.
- UpperCase() , LowerCase() 메소드 사용
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.next();
String b = "";
for(int i=0; i < a.length(); i++){
char c = a.charAt(i);
if(Character.isUpperCase(c)){
b += Character.toLowerCase(c);
} else {
b += Character.toUpperCase(c);
}
}
System.out.println(b);
sc.close();
}
}
isUpperCase()와 isLowerCase()는 대소문자를 검사할 때,
toUpperCase()와 toLowerCase()는 각각 대문자, 소문자로 변환할 때 사용된다.
if문과 메소드를 통해 각 문자가 대소문자인지 쉽게 검사할 수 있고
이를 기준으로 변환 역시 쉽게 할 수 있다.