알고리즘

[알고리즘] 백준 2744 대소문자 문자 바꾸기 문제 풀이

트리스탄1234 2025. 2. 11. 07:34
728x90
반응형
 

문제

영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 단어의 길이는 최대 100이다.

출력

첫째 줄에 입력으로 주어진 단어에서 대문자는 소문자로, 소문자는 대문자로 바꾼 단어를 출력한다.

예제 입력 1 복사

WrongAnswer

예제 출력 1 복사

wRONGaNSWER

 

반응형

백준 문제 중 문자열에 관한 2744번의 풀이에 대해서 포스팅을 해보겠습니다.

위의 문제에서 보듯이 한개의 문자열이 주어지고 이 문자열은 대문자와 소문자의 혼합으로 구성이 되어 있습니다. 

 

다시 말해서 대문자로 들어 오면 소문자로 바꾸고 소문자로 들어 오면 대문자로 바꾸어 출력을 하는 문제 입니다.

이문제를 풀기 위해서는 ASCII 코드를 조금은 알아야 하는데요. 

 

아래 표를 보면 대문자 'A'는 십진수로 65로 표현이 되고, 소문자 'a'는 십진수 97로 표시가 됩니다. 

 

728x90

우선 문자열이 어떻게 연산이 되고 저장이 되는지 살펴 봅시다. 

 

char test = 65; 를 입력 하고 출력을 해보면 어떤 값이 나올까요?

char이라는 문자형태의 변수에 10진수 65를 넣으면 실제로 char test = 'A'와 같은 결과가 나오빈다. 

 

System.out.println(x); 의 출력 값은 'A'로 출력이 되지요. 

입력 되는 변수의 형태에 맞추어 ASCII코드에 따라 해당 문자를 저장을 하게 됩니다. 

 

두번째로 알아야할 점은 문자열 끼리도 연산이 되는데요. 

System.out.println('B' - 'A'); 라는 명령을 수행하면 1이라는 값이 나옵니다. 

 

ASCII표에서 보면 B는 십진수로 66이고 A는 65이기 때문에 출력은 1이 나오는거죠. 

이를 이용해서 위의 문제를 풀수가 있는데요. 

 

위으 문제를 풀어 보면 아래 코드로 풀수가 있는데요. 

import java.util.*;
import java.io.*;

public class Solution {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer st;
	
	public static void main(String[] args) throws IOException{
		String str = br.readLine();
		for(int i =0; i < str.length(); i++){
			if('A' <= str.charAt(i) && str.charAt(i) <= 'Z' ) {
				System.out.print((char)('a'+ str.charAt(i) -'A'));
			}
			else if( 'a' <= str.charAt(i) && str.charAt(i) <= 'z') {
				System.out.print((char)('A' + str.charAt(i) - 'a'));
			}
			
		}
		System.out.println();
	}
}

 

위의 코드를 한 줄씩 살펴 보면 

String str = br.readLine(); 명령으로 버퍼리더를 이용해서 문자열 한개를 입력을 받고 str이라는 변수에 저장을 합니다. 

for문을 이용해서 str의 문자열 길이만큼 for문을 실행을 하면서. 

 

chatAt(i)라는 함수를 이용해서 해당 문자열의 i번째 문제가 대문자  'A'부터 'Z'사이에 있는 문자인지 검사를 하고

대문자 라면 'a' +str.charAt(i) -'A'구문을 이용해서 ASCII값을 구합니다.

 

예를 들어 str.charAt(i)번째 문짜가 대문자 'B'라고 생각을 하고 수식에 대입을 해보면

(97 + 66 -65) = 98입니다. 이 98을 ASCII코드표를 보면 소문자 'b'가 되죠.

 

그래서 입력문자가 대문자 이면 소문자 a + 입력된 대문자 - 대문자 A를 입력을 하면 

소문자로 바꿀수가 있어요. 여기서 입력된 문자 - 대문자 A를 하게 되는 경우는 대문자 A로 부터의 입력된 문자의 거리?

로 생각을 하시면 될거 같아요. 

 

그리고 소문자 입력은 반대의 경우로 ('A' + str.charAt(i) - 'a')의 수식을 이용해 구하면 되죠. 

다만 위에서 연산을 하게 되면 10진수가 되는데 이를 문자형으로 케스팅을 하기 위해 (char)로 캐스팅 구문을 넣어주면 

 

문자로 변경이 됩니다. 

그럼 오늘도 열공 하세요 .

 

728x90
반응형