728x90
SMALL
백준 문제 풀이: 10769 [행복한지 슬픈지]
문제 링크: https://www.acmicpc.net/problem/10769
문제 설명:
주어진 문자열에서 ":-)"와 ":-(" 이모티콘을 각각 찾아 그 개수를 센 후, 해당 개수에 따라 문자열의 감정을 판단하는 문제입니다.
출력 조건은 다음과 같습니다:
- 행복한 이모티콘과 슬픈 이모티콘이 모두 없다면 "none"을 출력합니다.
- 행복한 이모티콘과 슬픈 이모티콘의 개수가 같다면 "unsure"를 출력합니다.
- 행복한 이모티콘이 더 많으면 "happy", 슬픈 이모티콘이 더 많으면 "sad"를 출력합니다.
문제 해결 코드
// C++로 구현된 코드
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
string str;
getline(cin, str); // 입력 문자열
int happyCnt = 0; // ":-)" 개수
int sadCnt = 0; // ":-(" 개수
// 문자열에서 이모티콘 개수 세기
for (int i = 0; i < str.size() - 2; i++) {
if (str[i] == ':' && str[i + 1] == '-' && str[i + 2] == ')') {
happyCnt++;
}
if (str[i] == ':' && str[i + 1] == '-' && str[i + 2] == '(') {
sadCnt++;
}
}
// 출력 조건
if (happyCnt == 0 && sadCnt == 0) {
cout << "none";
} else if (happyCnt == sadCnt) {
cout << "unsure";
} else if (happyCnt < sadCnt) {
cout << "sad";
} else {
cout << "happy";
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘:
- 입력 문자열에서 연속된 세 문자를 검사해 ":-)" 또는 ":-(" 패턴을 찾습니다.
- 각 패턴이 발견될 때마다 카운트를 증가시킵니다.
- 구현 세부사항:
- 문자열의 길이가 3 미만이면 이모티콘이 없으므로 바로 "none"을 출력할 수 있습니다.
- 연속된 세 문자를 검사하기 때문에 반복문의 종료 조건은 문자열 길이 - 2까지입니다.
- 결과 출력은 이모티콘의 개수에 따라 "none", "unsure", "happy", 또는 "sad"를 출력합니다.
- 시간 복잡도 분석:
- 문자열 길이를 n이라 할 때, 각 문자를 O(1) 시간에 검사하므로 전체 복잡도는 O(n)입니다.
결과
입력된 문자열에서 ":-)"와 ":-("의 개수를 정확히 계산하여, 감정 상태를 올바르게 판단합니다.
해당 문제에 대한 다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 문자열' 카테고리의 다른 글
백준 9243번 [파일 완전 삭제](C++) -yes6686- 티스토리 (1) | 2024.12.15 |
---|---|
백준 1755번 [숫자놀이](C++) -yes6686- 티스토리 (0) | 2024.11.14 |
백준 9996번 [한국이 그리울 땐 서버에 접속하지](C++) -yes6686- 티스토리 (0) | 2024.07.16 |
백준 16171번 [나는 친구가 적다 (Small)](C++) -yes6686- 티스토리 (0) | 2024.07.16 |
백준 11656번 [접미사 배열](C++) -yes6686- 티스토리 (0) | 2024.07.13 |