알고리즘&자료구조/Algorithm
대소문자 변환
백엔드 개발자 - 젤리곰
2023. 12. 17. 13:52
728x90

1. 문제
설명
대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.
입력
첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.
문자열은 영어 알파벳으로만 구성되어 있습니다.
출력
첫 줄에 대문자는 소문자로, 소문자는 대문자로 변환된 문자열을 출력합니다.
예시입력
StuDY
예시출력
sTUdy
2. 결과
세 가지 풀이법이 있습니다.
비슷하지만 효율성 측면에서 조금씩 차이가 납니다.
1) 첫번째 풀이
package topic01_02;
import java.util.*;
public class Main {
public String solution(char c){
String answer = "";
if(Character.isUpperCase(c) == true){
answer = String.valueOf(Character.toLowerCase(c));
} else {
answer = String.valueOf(Character.toUpperCase(c));
}
return answer;
};
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String c = kb.next();
for(int i = 0; i < c.length(); i++){
System.out.print(T.solution(c.charAt(i))); //각 문자에 대해 별도의 메서드 호출을 수행합니다.
}
}
}
2)두번째 풀이
import java.util.Scanner;
public class Main {
public String solution(String str) {
char[] chars = str.toCharArray(); // 문자열을 char 배열로 변환
StringBuilder answer = new StringBuilder(); //StringBuilder로 문자열을 구성할 거임.
for (char c : chars) { //char배열을 순회한다.
if (Character.isUpperCase(c)) {
answer.append(Character.toLowerCase(c));
} else {
answer.append(Character.toUpperCase(c));
}
}
return answer.toString();
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String input = kb.next();
System.out.print(T.solution(input));
}
}
3) 세번째 풀이
import java.util.Scanner;
public class Main {
public String solution(String str) {
StringBuilder answer = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i); //각 인덱스에서 문자를 직접 가져와 처리합니다.
if (Character.isUpperCase(c)) {
answer.append(Character.toLowerCase(c));
} else {
answer.append(Character.toUpperCase(c));
}
}
return answer.toString();
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String input = kb.next();
System.out.print(T.solution(input));
}
}
3. 효율성 비교
✔️ 세번째 풀이 > 두번째 풀이 > 첫번째 풀이
✔️첫번째 풀이 : 메서드 호출 오버헤드가 있기 때문에 시간이 더 오래 소요될 수 있습니다.
✔️두번째 풀이 : 추가적인 char 배열을 생성하기 때문에, 세 번째 방법에 비해 약간 더 많은 메모리를 사용합니다.
✔️세번째 풀이 : 메서드 호출 오버헤드가 없고, 추가적인 데이터 구조를 생성하지 않기때문에 가장 효율적입니다.
728x90