서비스 기획자 기록

[백준] 2744번 : 대소문자 바꾸기 - Java 본문

백준

[백준] 2744번 : 대소문자 바꾸기 - Java

주니5947 2025. 1. 5. 19:07

https://www.acmicpc.net/problem/2744


  • 문제


  • 풀이

- 각 문자의 아스키 코드표에서 차이를 기준으로 직접 대소문자 바꾸기

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

public class Main {
    public static void main(String[] args) throws IOException {
    	
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	
    	String str = br.readLine();
        int N = str.length();
        
        for (int i = 0; i < N; i++) {
        	char ch = str.charAt(i);
        	if ((ch-'a') < 0) {
        		ch = (char)(ch+(int)('a'-'A'));
        	}
        	else 
        		ch = (char)(ch-(int)('a'-'A'));
        		
        System.out.print(ch);
        }
    	
        
    	br.close();
    }
}

 

먼저 아스키 코드표 상에서 소문자는 대문자 뒤에 위치한다는 점은 알고 있다는 전제 하에 문제를 풀었다.

 

ch - 'a'가 0보다 작게 되면 a보다 앞에 위치한 문자이므로 대문자, 아닐 경우 소문자라고 판단할 수 있다.

또한 모든 대문자와 소문자 사이의 차이는 같으므로 'a' - 'A'를 통해 대문자와 소문자 간의 차이를 숫자로 표현할 수 있다.

대문자는 이 차이를 더해서 소문자로, 소문자는 이 차이를 빼서 대문자로 바꾸면 답을 구할 수 있다.

 

만 이렇게 복잡하게 할 필요없이 메소드를 활용하면 훨씬 쉽게 풀 수 있다.

 

- UpperCase() , LowerCase() 메소드 사용 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        String a = sc.next();
        String b = "";
        
        for(int i=0; i < a.length(); i++){
            char c = a.charAt(i);
            
            if(Character.isUpperCase(c)){
                b += Character.toLowerCase(c);
            } else {
                b += Character.toUpperCase(c);
            }
        }
        
        System.out.println(b);
        
        sc.close();
    }
}

 

isUpperCase()와 isLowerCase()는 대소문자를 검사할 때,

toUpperCase()와 toLowerCase()는 각각 대문자, 소문자로 변환할 때 사용된다.

if문과 메소드를 통해 각 문자가 대소문자인지 쉽게 검사할 수 있고

이를 기준으로 변환 역시 쉽게 할 수 있다.