본문 바로가기
백준

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

by 템닉___ 2024. 3. 20.

문제:

시도 횟수: 1번

처음 생각한 방법: 대문자 to 소문자, 소문자 to 대문자로 만들어주는 라이브러리나 함수가 있을것이라 예상함. 그래서 구글링한 결과 tolower, toupper라는 함수를 알게되었다.  

내 코드:

#include <bits/stdc++.h>
using namespace std;

int main()
{
 string s;
 cin >> s;
 for(int i = 0; i < s.size(); i++) {
    if(s[i] >= 'A' && s[i] <= 'Z')
        s[i] = tolower(s[i]);
    else
        s[i] = toupper(s[i]);
 }
 cout << s << endl;
 return 0;
}

모범답안:

#include <iostream>
#include <string>

int main() {
    std::string word;
    std::cin >> word;

    // 단어의 각 문자를 확인하며 대소문자를 변환
    for (char& c : word) {
        if (c >= 'a' && c <= 'z') { // 소문자인 경우
            c = c - 'a' + 'A'; // 대문자로 변환
        } else if (c >= 'A' && c <= 'Z') { // 대문자인 경우
            c = c - 'A' + 'a'; // 소문자로 변환
        }
    }

    // 변환된 단어 출력
    std::cout << word << std::endl;

    return 0;
}

위 코드는 GPT에게 풀게 시킨 결과이다. 라이브러리를 안 쓰는 경우에는 아스키코드로 접근해서 생각한다. 
각 문자에 - 'a' + 'A'를 해서 소문자를 대문자로 바꿀 수 있고, - 'A' + 'a'를 통해 대문자를 소문자로 바꿀 수 있다.
또한 각 문자를 확인하는 코드를 for(char& c : word)로 구현한 것이 인상깊다. 이런 range based for 구문은 이 문제를 풀고 몇일 뒤에 동기에게 들었었는데, 진작에 알았더라면 여기에 적용시킬수 있었을 것 같다.

#include <iostream>
#include <cctype> // toupper, tolower 함수를 사용하기 위해 포함

int main() {
    std::string word;
    std::cin >> word;

    // 단어의 각 문자를 확인하며 대소문자를 변환
    for (char& c : word) {
        if (std::islower(c)) { // 소문자인 경우
            c = std::toupper(c); // 대문자로 변환
        } else if (std::isupper(c)) { // 대문자인 경우
            c = std::tolower(c); // 소문자로 변환
        }
    }

    // 변환된 단어 출력
    std::cout << word << std::endl;

    return 0;
}

그리고 라이브러리를 쓰는 경우에는 islower, isupper라는 함수가 있다. 
toupper, tolower, islower, isupper 모두 cctype이라는 라이브러리에 포함되어있다. 명시해주지 않아도 사용이 되는 것으로 보아 iostream에 종속적인 헤더인것 같다.

내 코드의 개선할 점: 위에서 얻은 인사이트를 바탕으로 다른 문제에 적용시킬 수 있을 것 같다. 

알고리즘 분류: 구현, 문자열

난이도: 브론즈 V

복습하면서 참고해본 블로그 목록: 

https://mutpp.tistory.com/entry/C-%EB%8C%80%EB%AC%B8%EC%9E%90%EC%86%8C%EB%AC%B8%EC%9E%90-%EB%B3%80%ED%99%98

 

C++ 대문자/소문자 변환

너무 바빠서 긴 포스팅 글의 마무리를 못하고 있다.. 일단 가벼운거라도 올려야 들 억울할 것 같다 1. std::transform 사용 2. std::toupper & std::tolower 사용 3. boost::to_upper 와 to_lower 사용 1. std::transform 구

mutpp.tistory.com

toupper, tolower를 이 블로그를 보고 알게되었다. 

'백준' 카테고리의 다른 글

[백준] 10809번 - 알파벳 찾기  (0) 2024.03.20
[백준] 11718번 - 그대로 출력하기  (0) 2024.03.20
[백준] 2738번 - 행렬 덧셈  (0) 2024.03.18
[백준] 2475번 - 검증수  (0) 2024.03.18
[백준] 15964번 - 이상한 기호  (0) 2024.03.18