본문 바로가기
코딩테스트

[Java] 대소문자 변환

by codeok 2022. 6. 11.
반응형
다시 코딩 테스트를 준비하면서 문제 리뷰를 진행하려고 한다.
 
해당 문제를 풀면서 첫 번째 풀이에는 Character의 메소드를 사용해서 풀이를 했다.
 
두 번째 풀이에는 A-Z, a-z 의 아스키 코드 범위를 비교연산자로 비교하면서 해결했다.
 대소문자의 아스키 코드는 하단과 같다.
 

대문자 아스키 코드 : A(65) ~ Z(90)

소문자 아스키 코드 : a(97) ~ z(122)

 

설명

대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.

입력

첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.

문자열은 영어 알파벳으로만 구성되어 있습니다.

출력

첫 줄에 대문자는 소문자로, 소문자는 대문자로 변환된 문자열을 출력합니다.

 

예시 입력 1 

StuDY

예시 출력 1

sTUdy

 

 

첫 번째 풀이

해당 문제는 대소문자를 서로 변환하는 문제이기에 처음 문제를 풀 때는 Character class의 isUpperCase, toUpperCase 와 같은 함수를 통해서 서로 대소문자를 변환하며 풀이했다.

 

package section01.E02_대소문자_변환;

import java.io.*;

public class Main {

    public String solution(String str) {
        StringBuilder answer = new StringBuilder();

        for (char inputChar : str.toCharArray()){
            if (Character.isUpperCase(inputChar)){
                answer.append(Character.toLowerCase(inputChar));
            } else if (Character.isLowerCase(inputChar)){
                answer.append(Character.toUpperCase(inputChar));
            }
        }

        return answer.toString();
    }

    public static void main(String[] args) throws IOException {

        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String inputString = br.readLine();

        String answer = T.solution(inputString);

        bw.write(answer);
        bw.flush();
        bw.close();
    }
}

 

두 번째 풀이

아스키 코드의 범위를 비교연산자를 사용해서 체크했다.

소문자 아스키 코드와 대문자 아스키 코드의 차이는 32이기에 final static int ASCII_DIFF = 32; 상수로 선언해서 사용을 해서 해결했다.

package section01.E02_대소문자_변환;

import java.io.*;

public class Main {
    final static int ASCII_DIFF = 32;
    public String solution(String str) {
        StringBuilder answer = new StringBuilder();

        // A(65) ~ Z(90)   : 대문자
        // a(97) ~ z(122)  : 소문자
        for (char asciiNumber : str.toCharArray()){
            // 대문자이면
            if (asciiNumber >= 65 && asciiNumber <= 90){
                // 소문자로
                answer.append((char)(asciiNumber + ASCII_DIFF));
            }

            // 소문자이면
            if (asciiNumber >= 97 && asciiNumber <= 122){
                // 대문자로
                answer.append((char)(asciiNumber - ASCII_DIFF));
            }
        }

        return answer.toString();
    }

    public static void main(String[] args) throws IOException {

        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String inputString = br.readLine();

        String answer = T.solution(inputString);

        bw.write(answer);
        bw.flush();
        bw.close();
    }
}

 

정리

Character에 존재하는 isLowerCase, isUpperCase, toUppderCase, toLowerCase 메소드를 정리를 해볼 수 있었고,

아스키 코드의 값을 직접 비교연산자로 다뤄볼 수 있었다.

반응형

'코딩테스트' 카테고리의 다른 글

[Java] 암호  (0) 2022.06.19
[Java] 가장 짧은 문자거리  (0) 2022.06.19