[백준(baekjoon) 10769] 행복한지 슬픈지

2018. 7. 16. 16:14Algorithm

반응형
[백준(baekjoon) 10769] 행복한지 슬픈지

문제

백준 10769

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.}

결과

Alt text


반응형