[백준(baekjoon) 10769] 행복한지 슬픈지
2018. 7. 16. 16:14ㆍAlgorithm
반응형
문제
1.행복한 표정 :
:-)
, 2.슬픈 표정 ::-(
입력 받은 문자열에 두가지 이모티콘이 섞여 들어올 때,
아래 규칙에 따라, 전체적인 분위기를 파악해 결과를 출력하라.
- 어떤 이모티콘도 포함되어 있지 않음 :
none
- 행복한 이모티콘과 슬픈 이모티콘의 수가 동일하게 포함 :
unsure
- 행복한 이모티콘이 슬픈 이모티콘보다 많이 포함 :
happy
- 슬픈 이모티콘이 행복한 이모티콘보다 많이 포함 :
sad
해결
알고리즘
정해진 패턴을 찾는 문자열 매칭 알고리즘이라고 할 수있다.
찾고자 하는 패턴이 모두 다른 3문자이므로 for
문을 사용해 일일이 확인하였다.
- 시간 복잡도 :
O(N)
설명
우선 이모티콘 3문자가 연속으로 나오는지 확인하기 위해 check
변수를 통해 횟수를 센다.
이모티콘의 앞의 2문자가 :-
으로 동일하므로 각 문자가 나왔을 때 check++
를 해준다.
(-
의 경우엔 check = 1
인 경우(=연속으로 나온 경우)에만 해준다.)
그 후, 마지막 입꼬리에 따라 이모티콘을 구분해 행복함/슬픔의 횟수를 각각 세준다.
최종적으로 두 횟수를 비교해 결과를 출력한다.
구현
1.import java.util.*;
2.
3.public class Main {
4. public static void main(String[] args) {
5. Scanner sc = new Scanner(System.in);
6. String input = sc.nextLine();
7.
8. int check = 0; // 이모티콘을 확인하는 변수로, 3문자가 모두 나왔는지 확인한다.
9. int smileCnt = 0;
10. int sadCnt = 0;
11. for (char c : input.toCharArray()) {
12. if (c == ':' || (c == '-' && check == 1)) {
13. check++;
14. continue;
15. }else if (check == 2) {
16. if (c == '(') sadCnt++;
17. else if (c == ')') smileCnt++;
18. }
19. check = 0;
20. }
21.
22. int diff = smileCnt - sadCnt;
23. if (diff == 0) {
24. if (smileCnt == 0) System.out.println("none");
25. else System.out.println("unsure");
26. } else
27. System.out.println(diff > 0 ? "happy" : "sad");
28. }
29.}
결과
반응형