백엔드 개발자 - 젤리곰 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