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()
: 개행 문자 처리를 위해 사용합니다.gcnt
와bcnt
: 각각 'g'와 'b'의 개수를 저장합니다.- 조건문을 사용해 개수 비교 후 결과를 출력합니다.
- 시간 복잡도 분석:
- 각 문장의 길이를
m
이라고 할 때, 문장을 한 번 순회하므로 시간 복잡도는 O(m)입니다. - 총
n
개의 문장이 주어지므로, 전체 시간 복잡도는 O(n ⋅ m)입니다.
- 각 문장의 길이를
결과
주어진 문장에서 'g'와 'b'의 개수를 비교하여 다음과 같은 결과를 정확히 출력합니다:
- 'g'가 더 많으면: "is GOOD"
- 'b'가 더 많으면: "is A BADDY"
- 동일하면: "is NEUTRAL"
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
백준 14910번 [오르막](C++) -yes6686- 티스토리 (0) | 2024.07.15 |
---|---|
백준 5704번 [팬그램](C++) -yes6686- 티스토리 (0) | 2024.07.15 |
백준 11586번 [지영 공주님의 마법 거울](C++) -yes6686- 티스토리 (0) | 2024.07.14 |
백준 3230번 [금메달, 은메달, 동메달은 누가?](C++) -yes6686- 티스토리 (0) | 2024.07.13 |
백준 3035번 [스캐너](C++) -yes6686- 티스토리 (0) | 2024.07.13 |