[인프런 알고리즘] (String) S01-02 대소문자 변환

해로(김선호)·2022년 7월 13일
0

알고리즘 / PS

목록 보기
1/4
post-thumbnail

문제

  • 대문자와 소문자가 같이 존재하는 문자열을 입력받고, 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 문제이다.

입출력 예시

// 입력
StuDY

// 출력
sTUdy

풀이 1 : 유니코드 이용

    public String solution(String word) {
        // 아스키 코드 65 = 'A', 90 = 'Z' 97 = 'a', 122 = 'z'
        StringBuilder sb = new StringBuilder();

        // 대문자: 32를 더하여 소문자로 만든다.
        // 소문자 : 32를 빼서 대문자로 만든다.
        for (char x : word.toCharArray()) {
            if (x >= 65 && x <= 90) {
                sb.append((char) (x + 32));
            } else {
                sb.append((char) (x - 32));
            }
        }

        return sb.toString();
    }
  • Java의 문자형(char) 변수에는 실제 문자가 아닌 문자의 유니코드(정수)가 저장된다는 점을 이용한다.
    • 문자 ‘A’ 의 유니코드는 65, 문자 ‘Z’의 유니코드는 90 이다. (90 - 65 + 1 = 26. 알파벳의 갯수)
    • 문자 ‘a’ 의 유니코드는 97, 문자 ‘z’의 유니코드는 112 이다.

풀이 2 : Character.isLowerCase() 메서드 이용

// #2. Character.isLowerCase();
    public String solution2(String word) {
        StringBuilder sb = new StringBuilder();

        for (char x : word.toCharArray()) {
            if (Character.isLowerCase(x)) {
                sb.append(Character.toUpperCase(x));
            } else {
                sb.append(Character.toLowerCase(x));
            }
        }

        return sb.toString();
    }
  • Character.isLowerCase(char ch) 메서드는 문자가 소문자인지를 판단하는 메서드이다.
    • 메서드의 결과값이 true이면, Character.toUpperCase() 를 이용하여 문자를 대문자로 변환한다.
    • 메서드의 결과값이 false이면, Character.toLowerCase() 를 이용하여 문자를 소문자로 변환한다.

전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    // #1. 유니코드 이용
    public String solution1(String word) {
        // 아스키 코드 65 = 'A', 90 = 'Z' 97 = 'a', 122 = 'z'
        StringBuilder sb = new StringBuilder();

        // 대문자: 32를 더하여 소문자로 만든다.
        // 소문자 : 32를 빼서 대문자로 만든다.
        for (char x : word.toCharArray()) {
            if (x >= 65 && x <= 90) {
                sb.append((char) (x + 32));
            } else {
                sb.append((char) (x - 32));
            }
        }

        return sb.toString();
    }

    // #2. Character.isLowerCase()
    public String solution2(String word) {
        StringBuilder sb = new StringBuilder();

        for (char x : word.toCharArray()) {
            if (Character.isLowerCase(x)) {
                sb.append(Character.toUpperCase(x));
            } else {
                sb.append(Character.toLowerCase(x));
            }
        }

        return sb.toString();
    }

    public static void main(String[] args) throws IOException {
        Main sol = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String word = br.readLine();

        System.out.println(sol.solution1(word));
    }
}
profile
Every Run, Learn Counts.

0개의 댓글