2022. 6. 19. 20:33ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/10769
10769번: 행복한지 슬픈지
승엽이는 자신의 감정을 표현하기 위해서 종종 문자 메시지에 이모티콘을 넣어 보내곤 한다. 승엽이가 보내는 이모티콘은 세 개의 문자가 붙어있는 구조로 이루어져 있으며, 행복한 얼굴을 나
www.acmicpc.net
접근 방법 - 문자형에 관한 조건문 응용문제
백준의 10769번 문제는 문자에 관련하여 조건문을 활용해 해결해야 하는 문제이다.
해당 문제는, 입력받은 문자 내용 중 특정 이모티콘들을 확인하여 글쓴이의 심정을 파악해 출력해야 하는 문제이다.
여기서 우리가 판별해야 하는 이모티콘은 :-)와 :-(이며 다른 이모티콘은 모두 배제해야 한다.
필자의 경우엔 이모티콘의 첫번째 특수문자를 발견했을 시 바로 판별을 하도록 코드를 작성하였다.
이때 문자열을 입력받을 시 공백을 포함하여 입력받도록 해야 한다는 점을 유의하길 바란다.
만일 해당 문제의 해결에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 문자의 내용(st)을 입력받는다. (이때, 공백을 포함하여 입력받도록 한다.)
2) 행복한 얼굴 이모티콘의 개수를 저장할 변수 happy를 0으로 초기화하여 선언한다.
마찬가지로, 슬픈 얼굴 이모티콘의 개수를 저장할 변수 sad를 0으로 초기화하여 선언한다.
3) 반복문으로 st의 문자 값들을 탐색하며 아래의 연산을 취한다.
- 현재 탐색값이 ':'인 경우, 이다음의 값이 '-'인지를 판단한다.
- 위 2가지 조건을 만족할 경우, 그다음의 값을 확인한다.
만일 이 값이 ')'인 경우엔 happy에 1을 더하고, '('인 경우엔 sad에 1을 더하도록 한다.
4) 3)의 반복문이 종료되었다면 happy와 sad의 값을 비교해본다.
- 만일 두 값 모두 0이라면 감정 표현이 없다고 판단되기 때문에 "none"을 출력한다.
- 두 값이 0이 아닌 값으로 동일하다면 감정을 파악할 수 없기 때문에 "unsure"을 출력한다.
- happy의 값이 sad의 값보다 더 크다면 이는 행복한 상태임을 뜻한다. 이 경우엔 "happy"를 출력한다.
- sad의 값이 happy의 값보다 더 크다면 이는 슬픈 상태임을 뜻한다. 이 경우엔 "sad"를 출력한다.
5) 출력이 끝났다면, 실행 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;
//백준 10769번 코드
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
string st;
getline(cin, st);
int happy = 0;
int sad = 0;
for (int i = 0; i < st.length(); i++) {
if (st[i] == ':' && st[i + 1] == '-') {
if (st[i + 2] == ')') { happy++; i += 2; }
else if (st[i + 2] == '(') { sad++; i += 2; }
}
}
if (happy == 0 && sad == 0) { cout << "none" << endl; }
else if (happy == sad) { cout << "unsure" << endl; }
else if (happy > sad) { cout << "happy" << endl; }
else if (happy < sad) { cout << "sad" << endl; }
}
제출 결과
(2022.04.25 백준 10769번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 1550번 16진수 (C++/cpp) (0) | 2022.06.21 |
---|---|
[백준 BOJ] 1748번 수 이어 쓰기 1 (C++/cpp) (0) | 2022.06.19 |
[백준 BOJ] 16394번 홍익대학교 (C++/cpp) (0) | 2022.06.19 |
[백준 BOJ] 4470번 줄번호 (C++/cpp) (0) | 2022.06.19 |
[백준 BOJ] 2960번 에라토스테네스의 체 (C++/cpp) (0) | 2022.06.18 |