오래간만에 알고리즘 글을 남기네욬ㅋㅋ 사실 1일 1문제는 계속 하고 있어 제 GitHub에 가시면 꾸준히 풀어 올린걸 볼 수 있습니다! 아래 링크 들어가셔서 궁금한 문제 번호를 찾아서 같이 고민해봐요!!
https://github.com/JinHyung16/Algorithm_Practice
저는 늘 공부할때 정답 찾기보단 게시판에 가서 다른 사람들의 풀이도 보는거 같아요. 이유는 다른 사람은 이 문제를 어떤 시야로 바라봤는지 알아가는게 재밌고 이 방법으로 하니깐 어떤 어려운 문제를 풀더라도 오래걸리지만 결국 다양한 시야에서 빠르게 접근하면서 문제 이해가 쉽더라고요
여튼 최근 코테를 자주봤는데 문자열 관련해선 무조건 나오는거 같길래 간만에 쉬운거부터 시작하고자 들고 왔습니다.
https://www.acmicpc.net/problem/2744
문제를 보면 결국 대문자는 소문자로 소문자는 대문자로 변화하는건데 여러 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;
}
'알고리즘 (C++)' 카테고리의 다른 글
[백준] 15903번: 카드 합체 놀이 (0) | 2023.11.16 |
---|---|
[피보나치 수열] 2가지 방법 (0) | 2023.11.14 |
[백준] 가장 긴 증가하는 부분 수열 2 (0) | 2023.06.29 |
[백준] 이분 탐색 (0) | 2023.06.28 |
[백준] 분리집합(유니온-파인드) (0) | 2023.06.24 |