본문 바로가기
알고리즘 (C++)

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

by Dev_Hugh 2023. 11. 9.
728x90
반응형

오래간만에 알고리즘 글을 남기네욬ㅋㅋ 사실 1일 1문제는 계속 하고 있어 제 GitHub에 가시면 꾸준히 풀어 올린걸 볼 수 있습니다! 아래 링크 들어가셔서 궁금한 문제 번호를 찾아서 같이 고민해봐요!!

https://github.com/JinHyung16/Algorithm_Practice

 

GitHub - JinHyung16/Algorithm_Practice

Contribute to JinHyung16/Algorithm_Practice development by creating an account on GitHub.

github.com

 

저는 늘 공부할때 정답 찾기보단 게시판에 가서 다른 사람들의 풀이도 보는거 같아요. 이유는 다른 사람은 이 문제를 어떤 시야로 바라봤는지 알아가는게 재밌고 이 방법으로 하니깐 어떤 어려운 문제를 풀더라도 오래걸리지만 결국 다양한 시야에서 빠르게 접근하면서 문제 이해가 쉽더라고요

 

여튼 최근 코테를 자주봤는데 문자열 관련해선 무조건 나오는거 같길래 간만에 쉬운거부터 시작하고자 들고 왔습니다.

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

 

2744번: 대소문자 바꾸기

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

www.acmicpc.net

 

문제를 보면 결국 대문자는 소문자로 소문자는 대문자로 변화하는건데 여러 header를 아시는 분들이면 제공하는 기능을 사용해서 빠르게 if문으로 체크한 뒤 변환하겠지만 모르는 상황에서 풀기 위해선 기본적인것만 알면 됩니다.

1) 문자열에서 문자 하나하나 체크하는 방법

2) 그러면 이 문자 하나가 대문자인지 소문자인지 체크하는 방법

3) 대문자 A와 소문자 a와의 관계 -> 아스키 코드를 알자!!

 

아래 코드를 보면 매우 간단합니다. string[i]는 문자열에서 i번째 문자를 비교하고 대문자는 A로 소문자는 a로 비교합니다.

그럼 대문자 A와 소문자 a와의 관계를 알아야하는데 아스키 코드를 보면 A는 65부터 a는 97부터 시작합니다. 보면 숫자 32만큼 차이나죠? 그러면 32만큼 더하고 빼면됩니다.

 

if) 아스키 코드를 모르는 경우!!

1) #include<iostream> 선언

2) char a = 'a'; 선언

3) cout << a - 0 << "\n"; 출력하여 나온 값을 보시면 됩니다!

#include<iostream>
#include<string>

#define FastIO ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL);

using namespace std;

int main(void)
{
	FastIO;

	string input;
	cin >> input;
    
    //입력으로 들어온 문자열을 처음부터 끝까지 확인합니다.
	for ( int i = 0; i < input.size(); i++ )
	{
    	//input[i]는 문자열중 i번째 index의 문자를 체크하는 겁니다.
		if ( 'A' <= input[i] && input[i] <= 'Z' )
		{
			input[i] += 32;
		}
		else if ( 'a' <= input[i] && input[i] <= 'z' )
		{
			input[i] -= 32;
		}
	}

	cout << input << "\n";

	return 0;
}

 

 

728x90
반응형