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
'알고리즘&자료구조 > Algorithm' 카테고리의 다른 글
[백트래킹] LeetCode 17. 전화번호 문자 조합 (1) | 2024.01.15 |
---|---|
[DFS]LeetCode 200번. 섬의 개수 (1) | 2024.01.11 |
코딩 테스트를 준비한다면 알아야 할 '시간 복잡도' 이해하기 (1) | 2024.01.03 |
문자찾기 (1) | 2023.12.17 |
[알고리즘]백준 2644번 촌수계산(DFS와 BFS알고리즘) (1) | 2023.10.21 |