https://www.acmicpc.net/problem/2744
2744번: 대소문자 바꾸기
영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오.
www.acmicpc.net
문제를 풀기에 앞서 ASCII Code에 대해서 필요한 정보를 정리하고 넘어가자.
간단하게 char에 해당되는 정수 값이 존재한다고 생각하면 된다.
예를 들어, 문자 A의 ASCII Code 값은 65이다.
아래 테이블을 참고하자.
중요한건, 문제를 풀 때, 각 문자에 해당되는 ASCII Code 값을 알아야하는 게 아니라는 것이다.
어떻게 활용하면 되는가?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package String;
public class StringClass {
public static void main(String[] args) {
// ASCII Code값을 char 변수에 넣으면, 그 변수에 ASCII Code값에 해당하는 문자가 저장된다.
char x = 65;
System.out.println(x); // A
// 문자끼리 연산이 가능 -> 문자 사이의 간격만큼 결과가 나타남
int n = 'Z' - 'A';
System.out.println(n); // 25 -- A는 1번째, Z는 26번째 문자니까
// char와 int 사이에 연산이 가능
System.out.println(x + 25); // 90
// 문자끼리 대소비교가 가능(ASCII Code 값으로 대소비교)
System.out.println('A' < 'Z'); // true
// Casting
// char를 int로 형변환 가능(ASCII Code 값 저장)
System.out.println((int)x); // 65
// int를 char로 형변환 가능(ASCII Code 값이 해당 int 값인 char이 반환)
System.out.println((char)(x + 25)); // Z (ASCII Code값이 90)
}
}
|
cs |
이를 활용하여 간단하게 대소문자를 변환해보자.
중요한 생각은 A와 Z 사이의 간격은 a와 z 사이의 간격과 같다는 것!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package String;
public class StringClass {
public static void main(String[] args) {
String str = "AbCdEf";
for (int i = 0; i < str.length(); i++) {
// 대문자의 경우!
if('A' <= str.charAt(i) && str.charAt(i) <= 'Z') {
// int dist = str.charAt(i) - 'A'; // A와의 간격
System.out.print((char)('a' + str.charAt(i) - 'A')); // a로부터 해당 간격만큼 떨어진 문자로!
}
else {
System.out.print((char)('A' + str.charAt(i) - 'a'));
}
}
}
}
|
cs |
AbCdEf가 aBcDeF로 변환됨을 알 수 있다.
이제 [BOJ] 2744. 대소문자 바꾸기 문제를 풀어보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
String answer = "";
for (int i = 0; i < str.length(); i++) {
if ('A' <= str.charAt(i) && str.charAt(i) <= 'Z') { // 대문자라면,
answer += (char)('a' + str.charAt(i) - 'A');
} else { // 소문자라면,
answer += (char)('A' + str.charAt(i) - 'a');
}
}
System.out.println(answer);
}
}
|
cs |
또는,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
char[] arr = str.toCharArray();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if('A' <= ch && ch <= 'Z') {
arr[i] = (char)('a' + ch - 'A');
} else {
arr[i] = (char)('A' + ch - 'a');
}
}
System.out.println(arr);
}
}
|
cs |
끝.
'알고리즘 및 코테 > 자료구조 및 알고리즘' 카테고리의 다른 글
[String] 문자열(Java) (0) | 2023.03.22 |
---|