코테초보 코커두드

[코딩 초보의 탐구] 백준 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.  결과

 

둘 다 맞았습니다. 시간도 비슷하고, 메모리도 비슷하네요.

다양한 방법을 시도해보니 스스로도 매우 뿌듯한 시간이었습니다.

아직 코딩테스트 초보이지만 꾸준히 해보려합니다.

다들 좋은 하루 되세요:)