[BOJ 24886] 백준 24886번 - SKH 문자열
2022 숭고한 연합 알고리즘 콘테스트 Open Contest 풀이 | ||
---|---|---|
A | [BOJ 24883] 자동완성 | |
B | [BOJ 24884] 장작 넣기 | |
C | [BOJ 24885] 주식 | |
D | [BOJ 24886] SKH 문자열 | |
E | [BOJ 24887] 최대한의 휴식 | |
F | [BOJ 24888] 노트 조각 | |
I | [BOJ 24891] 단어 마방진 |
1. 문제
$24886$. SKH 문자열 (2022 숭고한 연합 알고리즘 콘테스트 D번)
2. 풀이
- 문자열에서
SKH
의 개수를 센다. - 남는 문자열에서
SK
,KH
,SH
의 개수를 센다. - 남는 문자열에서
S
,K
,H
의 개수를 센다.
위에서 $1, 2, 3$의 순서대로 검사한다면, 위 과정을 아래에 있는 코드처럼 하나로 통일할 수도 있다.
이제 개수를 센 문자열들 각각에 $p$개의 $S$, $q$개의 $K$, $r$개의 $H$를 배정해야 한다. 순서는 다음과 같다.
SKH
는 그 자체로 완성이다.SK
에H
를 붙인다.SH
에K
를 붙인다.KH
에S
를 붙인다.S
에KH
를 붙인다.K
에SH
를 붙인다.H
에SK
를 붙인다.SKH
를 붙인다.
1, 2 과정은 이런 식으로 진행된다.
SKH
의 개수만큼 정답에 더한다. $\rightarrow$ ans +=SKH
SK
의 개수에R
개의H
를 가능한 많이 붙인다. $\rightarrow$ ans += min(SK
,R
)SH
의 개수에Q
개의K
를 가능한 많이 붙인다. $\rightarrow$ ans += min(SH
,Q
)KH
의 개수에P
개의S
를 가능한 많이 붙인다. $\rightarrow$ ans += min(KH
,P
)
다음으로는 3, 4 과정을 수행해야 한다. 이는 한번에 계산된다. 일례로 S
에 KH
를 붙이는 작업을 수행하려 할때, 가능한 최대 개수는 min(S
, KH
)이다. 따라서, 0 ~ min(S
, KH
)까지 모든 경우를 탐색한다.
임의의 $x(0\leq x\leq min(S, KH))$에 대해서, K
에 SH
를 붙이고 H
에 SK
를 붙이고 SKH
를 붙이는 나머지 과정을 모든 $x$에 대해서 수행한다. K
에 SH
를 붙이는 것도, H
에 SK
를 붙이는 것도, 이와 동일하게 수행하여 maximum
을 갱신한다.
1, 2 과정에서 구한 답과 3, 4 과정에서 구한 답을 더하면, 최종 답이 도출된다.
3. 채점 결과
4. 회고
두 개씩 붙이는 방법을 생각해내기 어려웠고, 구현도 복잡해서 그 과정에서 WA
를 두 번 받았다. 약간의 그리디한 방법이 첨가된 완전탐색인거 같은 느낌을 받았고, 이에 대해서 새롭게 알게 되었다.
댓글남기기