2023. 10. 22. 00:41ㆍ코딩 테스트 (BOJ)
이 문제는 오늘 다녀온 ICPC 예선전에서 C번 문제로 나왔던 행복 점수이다.
문제 지문
코로나 19 이후 우울함에 빠져 있는 소년 짐은 세상의 모든 짐을 지고 있는 느낌이다. 짐은 친구들의 행복 정도를 측정하고 싶어졌다. 짐이 생각한 한 가지 방법은 친구들이 보낸 문자 메시지를 분석하여 친구들이 행복한지 판단하는 것이다. 문자 메시지의 글자가 단어 "HAPPY"에 나타나면 그 글자는 행복한 글자이고 단어 "SAD"에 나타나면 그 글자는 우울한 글자이다. 글자 'A'는 양쪽에 모두 나타나므로 행복하기도 하고 우울하기도 한 글자이다. 글자 'B'는 어느 쪽에도 나타나지 않으므로 행복하지도 않고 우울하지도 않은 글자이다.
메시지의 행복 지수는 우울 점수를 이용하여 계산하는데, 행복 점수와 우울 점수는 글자가 행복한 글자인지 우울한 글자인지 여부에 따라 계산한다. 어떤 글자가 행복하면 행복 점수 P(H)를 증가시키고 어떤 글자가 우울하면 우울 점수 P(G)를 증가시킨다. 행복 지수 H는 다음과 같이 계산한다.
H = P(H) / (P(H) + P(G))
지문 요약
결국엔 입력받은 문장에서 "HAPPY" 즉, {'H', 'A', 'P', 'Y'} 중 하나가 포함될 때마다 P(H)를 증가시키고 "SAD"도 마찬가지로 P(G)를 증가시킨 다음, 위의 수식을 이용해서 결과 값을 도출하는 문제이다.
Sample Input
SAD MOVIES ALWAYS MAKE ME CRY
Output for the Sample Input
42.86
문제 해설
먼저 입력받은 문장을 split으로 쪼갠 문자들을 String 배열에 담은 다음, 원소 하나씩 Happy 혹은 Sad 문자열에 포함되는지를 검사하기 위해 KMP 알고리즘을 사용했다.
'코딩 테스트 (BOJ)' 카테고리의 다른 글
[백준 / BOJ] 4949번 균형잡힌 세상 (Javascript / Node js) (0) | 2023.10.25 |
---|---|
[백준 / BOJ] 13909번 창문 닫기 (Javascript / Node js) (0) | 2023.10.24 |
[백준/BOJ/ICPC] 16360번 Go Latin (Node js / Javascript) (0) | 2023.10.22 |
[백준 / BOJ] 17103번 골드바흐 파티션 (Javascript / Node js) (0) | 2023.10.21 |
[백준 / BOJ] 4948번 베르트랑 공준 (Javascript / Node js) (0) | 2023.10.21 |