코테초보 코커두드
[코딩 초보의 탐구] 백준 2744번 : 대소문자 바꾸기 (자바 JAVA)
코커두드
2024. 4. 9. 03:26
1. 문제
문자열에 관한 문제입니다. 어떻게 풀어야 할까요?
이 문제는 아스키코드를 활용한 풀이(+형변환)와 일반적인 풀이 두 가지로 해보겠습니다.
2. 풀이 (1) - 일반적인 풀이
import java.util.Scanner;
public class Main {
public String solution(String str) {
String answer = "";
for (char x:
str.toCharArray()) {
if (Character.isLowerCase(x)) {
answer += Character.toUpperCase(x);
} else {
answer += Character.toLowerCase(x);
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(T.solution(str));
}
}
(1) 메서드를 사용하지 않고 psvm 안에서 해결할 수 있지만 다양한 연습을 위해 메서드를 사용하였습니다.
(2) toCharArray -> 문자열을 배열로 바꾸어주는 메서드입니다.
(3) for-each문을 활용하여 반복문을 돌렸고, if 문을 사용하여 소문자면 대문자로, 대문자면 소문자로 변환하는 수식을 작성하였습니다.
(4) 완성된 글자는 answer에 담겨 결과값을 보여주게 하였습니다.
* 이 방법은 아스키코드를 사용하지 않아 형변환이 필요없습니다.
2. 풀이 (2) - ASCII코드를 활용한 풀이
구글링을 하면 아스키코드 표를 쉽게 찾을 수 있습니다.
대문자 A는 10진수로 65, 대문자 Z는 90 입니다.
소문자 a는 10진수로 97, 소문자 z는 122입니다.
import java.util.Scanner;
public class Main {
public String solution(String str) {
String answer = "";
for (char x:
str.toCharArray()) {
if (x >= 97 && x <= 122) {
answer += (char)(x - 32);
} else {
answer += (char)(x + 32);
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(T.solution(str));
}
}
(1) 알파벳이 소문자인경우 32를 빼주면 대문자로 변환할 수 있습니다.
(2) 단, 이 경우 숫자를 차감하기만 하면 결과값이 숫자로 나옵니다. 따라서 형변환을 해주어야 합니다.
(3) 형변환을 하기 위해 (char) 를 붙였습니다.
3. 결과
둘 다 맞았습니다. 시간도 비슷하고, 메모리도 비슷하네요.
다양한 방법을 시도해보니 스스로도 매우 뿌듯한 시간이었습니다.
아직 코딩테스트 초보이지만 꾸준히 해보려합니다.
다들 좋은 하루 되세요:)