관리 메뉴

cococo-coding

[C++ 풀이] 11365번. !밀비 급일 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 11365번. !밀비 급일

_dani 2024. 1. 24. 16:14


문제 분석

한 줄의 암호를 입력받아(줄바꿈 기준) 거꾸로 출력하는 문제이다.

END가 입력되면 끝내야한다. 

 

알고리즘 설계

우선 while(1)문으로 반복문을 설정하고, END가 입력되면 break;문으로 끝냈다. 

getline(cin,s)으로 암호들을 입력받았고, for문으로 문자열의 끝-1부터 0까지 반복해서 출력했다.

 

이때 문자열의 길이가 n이면 인덱스가 0부터 시작하므로, 끝은 n-1이라는 부분을 유의하자

 

코드

#include <iostream>
#include <string>
using namespace std;
/*
    1. 암호를 입력받는다.
    2. 각 암호를 해독한다.
    3. 해독한 암호를 출력한다.
*/

//size()는 컨테이너의 크기를 반환
//length()는 주로 string클래스, 해당 문자열 길이 반환
int main() {
    
    string s;
    //1
    while (1) {
        getline(cin, s);
        if (s == "END") break;
        //s.size()-1도 가능
        for (int i = s.length()-1; i >= 0; i--) {
            cout << s[i];
        }
        cout << '\n';
    }
    return 0;
}

위는 for문을 이용해 한 인자씩 거꾸로 출력한 코드이다.

 

더 간단한 방법으로는 아래의 reverse()함수를 이용한 코드가 있다.

int main() {

    string s;
    //1
    while (1) {
        getline(cin, s);
        if (s == "END") break;

        reverse(s.begin(), s.end());
        cout << s << '\n';
    }
    return 0;
}

느낀 점

s.length()와 s.size()로 문제의 예제들을 출력해봤는데 다 동일한 숫자가 나왔다.

 

코드

cout << "Size: " << s.size() << '\n';
cout << "Length: " << s.length() << '\n';
        for (int i = s.length()-1; i >= 0; i--) {
            cout << s[i];
        }

 

 

결과

위의 결과를 보면 size와 length의 길이가 다 동일하게 출력된다.

문제에도 size와 length를 모두 적용해봤는데 모두 통과되었다. 

둘 중에 어떤 함수를 쓰든지 상관은 없을 것 같다.