[Java] 대소문자 바꿔서 출력하기

peace w·2023년 9월 26일
0

프로그래머스

목록 보기
1/25

문제

  • 영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.

  • 제한사항
    1 ≤ str의 길이 ≤ 20
    str은 알파벳으로 이루어진 문자열입니다.

입출력 예

  • 입력 #1
    aBcDeFg

  • 출력 #1
    AbCdEfG

문제 풀이

1. 아스키 코드를 사용한다.

아스키 코드 참고

ASCII(American Standard Code for Information Interchange) CODE
정보교환을 위한 미국의 표준 코드

0부터 127까지, 128개의 7비트 문자를 포함하는 문자 집합이다.
0~9까지 숫자와, 알파벳(대소문자 구분), 일부 특수문자를 나타낼 수 있다.
내가 필요한 건 알파벳이다.

알파벳 대문자는 65번 'A' 부터 90번 'Z'까지
알파벳 소문자는 97번 'a' 부터 122번 'z'까지다.
그리고 대문자와 소문자 간에는 32번만큼 차이가 난다.
이 점을 문제 풀이에 이용할 것이다.

  • 문자열 strchar 형 배열로 변환한다.
  • arr[i] 에 필요한 아스키코드 값을 넣는다.

String.toCharArray()를 사용해 char 형 배열로 변환했고,
'a'부터 'z'까지 'A' 부터 'Z'까지라는 범위를 설정해서 그 범위에 해당하면 -32 또는 +32를 하도록 했다.
arr[i] >= 'a' && arr[i] <= 'z' 로 적었는데 arr[i] >= 97 && arr[i] <= 122 로 해도 된다. 난 숫자로 대입하면 헷갈릴 것 같아서 알파벳 그대로 넣었다.

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        
        char[] arr = a.toCharArray();
        
           for (int i = 0; i < arr.length; i++) {
                if (arr[i] >= 'a' && arr[i] <= 'z') {
                    arr[i] = (char)(arr[i]-32);
                    continue;
                    }
                if (arr[i] >= 'A' && arr[i] <= 'Z') {
                    arr[i] = (char)(arr[i]+32);
                    continue;
                    }
            }
            System.out.println(arr);
    }
}

2. uppercase를 사용한다.

String.charAt(i) 문자열 중에서 (i 번째)한 글자만 선택해서 char타입으로 변환한다.
Character.isUpperCase(a) a가 대문자인지 판단하여 true 또는 false를 반환한다.
Character.toUpperCase(a) 입력받은 a를 대문자로 변환한다.
Character.toLowerCase(a) 입력받은 a를 소문자로 변환한다.

문자열만 변환가능한줄 알았는데 아니더라..

우선 문자열을 charAt를 써서 char 타입으로 바꾼다. 그리고 바꾼 char 타입이 대문자인지를 판단하고 그것이 참이면 소문자로 변환하고, 거짓이면 대문자로 변환하게끔 한다.

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String answer = "";

        for(int i = 0; i< a.length(); i++){
            char c = a.charAt(i);
            if(Character.isUpperCase(c)){
                answer += Character.toLowerCase(c);
            } else{
                answer += Character.toUpperCase(c);
            }
        }
        System.out.println(answer);
    }
}

3. 아스키코드와 uppercase를 둘다 활용하면 이렇게도 가능하다.

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String answer = "";
        for(int i = 0; i< a.length(); i++){
            char c = a.charAt(i);
            if(Character.isUpperCase(c)){
                answer += ((char)(c+32));
            } else{
                answer += ((char)(c-32));
            }
        }
        System.out.println(answer);
    }
} 
        
profile
더 성장하자.

0개의 댓글