본문 바로가기

BAEKJOON/구현

백준 4447번 [좋은놈 나쁜놈](C++) -yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 4447 (좋은놈 나쁜놈)


문제 링크: https://www.acmicpc.net/problem/4447

문제 설명:

주어진 문장 속에서 문자 'g'와 'b' (대소문자 구분 없음)의 개수를 세어, - 'g'가 더 많으면 "is GOOD", - 'b'가 더 많으면 "is A BADDY", - 둘의 개수가 같으면 "is NEUTRAL" 이라고 판별합니다. 문장 s의 판별 결과를 출력하는 문제입니다.


문제 해결 코드


#include <iostream>
#include <string>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int n; // 문장의 개수
    cin >> n;
    cin.ignore(); // 개행 문자 처리

    for (int i = 0; i < n; i++) {
        string s;
        getline(cin, s);

        int gcnt = 0, bcnt = 0; // 'g'와 'b'의 개수

        // 문장 속 문자 개수 세기
        for (char c : s) {
            if (c == 'g' || c == 'G') gcnt++;
            else if (c == 'b' || c == 'B') bcnt++;
        }

        // 결과 판별 및 출력
        if (gcnt > bcnt) {
            cout << s << " is GOOD\n";
        } else if (gcnt < bcnt) {
            cout << s << " is A BADDY\n";
        } else {
            cout << s << " is NEUTRAL\n";
        }
    }

    return 0;
}

코드 설명

코드의 주요 로직과 사용된 알고리즘 설명:

  • 핵심 알고리즘: 각 문장에서 문자 'g'와 'b' (대소문자 구분 없이)의 개수를 세고, 그에 따라 결과를 판별합니다.
  • 구현 세부사항:
    • cin.ignore(): 개행 문자 처리를 위해 사용합니다.
    • gcntbcnt: 각각 'g'와 'b'의 개수를 저장합니다.
    • 조건문을 사용해 개수 비교 후 결과를 출력합니다.
  • 시간 복잡도 분석:
    • 각 문장의 길이를 m이라고 할 때, 문장을 한 번 순회하므로 시간 복잡도는 O(m)입니다.
    • n개의 문장이 주어지므로, 전체 시간 복잡도는 O(n ⋅ m)입니다.

결과

주어진 문장에서 'g'와 'b'의 개수를 비교하여 다음과 같은 결과를 정확히 출력합니다:

  • 'g'가 더 많으면: "is GOOD"
  • 'b'가 더 많으면: "is A BADDY"
  • 동일하면: "is NEUTRAL"

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST