[BOJ][๐ก4][๋ฐฑ์ค#25970] ํ๋ ๋ชจ๋น์ค ์์ด ์์คํ์
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
ํ๋ ๋ชจ๋น์ค์ ์์ด์์คํ์ ์ ๊ณ ์ ์ฃผํ ์ ์ฐจ๊ณ ๋ฅผ ๋ฎ์ถ์ด ์กฐ์ ์ฑ์ ํ๋ณดํ๊ณ , ๊ณต๊ธฐ ์ ํญ๋ ฅ์ ์ต์ํํ๋ ์ฅ์น๋ค. ๋นํฌ์ฅ ๋๋ก์์๋ ์ฐจ๊ณ ๋ฅผ ๋์ฌ ์ฐจ์ฒด๋ฅผ ๋ณดํธํ๋ฉฐ, ์น์ฐจ / ํ์ฐจ / ํ๋ฌผ ์ ์ฌ ์์ ์ฐจ๊ณ ๋ฅผ ์กฐ์ ํ์ฌ ํธ๋ฆฌํ ํ์น / ํ์ฐจ / ์ ์ฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋์์ฃผ๋ฉฐ, ํ๋ฌผ ์ ์ฌ์ ์๊ด์์ด ์ฐจ๊ณ ๋ฅผ ์ ์งํจ์ผ๋ก์จ ์ต์ ์ ์ฃผํ์ ๊ตฌํํ๋ค. ์ด๋ฒ์ ํ๋ ๋ชจ๋น์ค์ ์ ์ฌํ ์ ์ ๊ฐ๋ฐ์ A์จ๋ ์ด์ง์ ํํ๋ก ์ ์ฒ๋ฆฌ ๋์ด์ง ์ค์๊ฐ ์ฃผํ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด ์์ด ์์คํ์ ์ ์ด๋ป๊ฒ ์๋์์ผ์ผ ํ๋์ง ํ๋จํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๋ ์ ๋ฌด๋ฅผ ๋งก์๋ค. ์์ด ์์คํ์ ์ ์ํํธ์จ์ด์๋ $B$๊ฐ์ โ์ฐจ๊ณ ์ ๋์โ์ ํ๋จํ๋ ํ๋จ ๋ฐ์ดํฐ์, โ์ฐจ๊ณ ์ ๋ฎ์โ์ ํ๋จํ๋ $B$๊ฐ์ ํ๋จ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ณธ ํ์ฌ๋์ด ์๋ค. ํ๋จ ๋ฐ์ดํฐ์ ์ค์๊ฐ ๋ฐ์ดํฐ๋ 0๊ณผ 1์ ๋นํธ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ง๋ฉด, ์ด ์ค์๊ฐ ๋ฐ์ดํฐ์ ๋ฑ์ฅํ๋ ํ๋จ ๋ฐ์ดํฐ๋ก ์ฐจ๊ณ ๋ฅผ ๋์ฌ์ผ ํ ์ง, ๋ฎ์ถฐ์ผ ํ ์ง ๊ฒฐ์ ํ ์ ์์ผ๋ฉฐ, ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. ํ์ฌ ์ฐจ๊ณ $(C)$ = ์ค์๊ฐ ๋ฐ์ดํฐ์ ๋ฑ์ฅํ๋ โ์ฐจ๊ณ ์ ๋์โ ํ๋จ ๋ฐ์ดํฐ ์ - ์ค์๊ฐ ๋ฐ์ดํฐ์ ๋ฑ์ฅํ๋ โ์ฐจ๊ณ ์ ๋ฎ์โ ํ๋จ ๋ฐ์ดํฐ ์ ์๋ฅผ ๋ค์ด, $B = 1$ ์ด๋ฉฐ, โ์ฐจ๊ณ ์ ๋ฎ์โ์ ํ๋จํ๋ ํ๋จ ๋ฐ์ดํฐ = โ111โ, โ์ฐจ๊ณ ์ ๋์โ์ ํ๋จํ๋ ํ๋จ ๋ฐ์ดํฐ = โ101โ ๋ก ์ฃผ์ด์ง๋ค๊ณ ํ์. ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ โ11110100101001101โ ๋ก ์ฃผ์ด์ง๋ค๋ฉด, โ์ฐจ๊ณ ์ ๋์โ์ ํ๋จํ๋ ํ๋จ ๋ฐ์ดํฐ๊ฐ 3๋ฒ, โ์ฐจ๊ณ ์ ๋ฎ์โ์ ํ๋จํ๋ ํ๋จ ๋ฐ์ดํฐ๊ฐ 2๋ฒ ๋ฑ์ฅํ๋ฏ๋ก, ํ์ฌ ์ฐจ๊ณ ($C$)๋ 1์์ ์ ์ ์๋ค. ์ด๋ฅผ ํตํด A์จ๊ฐ ์์ฑํ ์๊ณ ๋ฆฌ์ฆ์ $C > 0$ ์ด๋ผ๋ฉด ์ฐจ๊ณ ์ ๋์ด๋ฅผ ๋ฎ์ถฐ์ผ ํ๋ฏ๋ก LOW $C$๋ฅผ ์ถ๋ ฅํ๊ณ , $C < 0$ ์ด๋ผ๋ฉด ์ฐจ๊ณ ๋ฅผ ๋์ฌ์ผ ํ๋ฏ๋ก HIGH $C$๋ฅผ ์ถ๋ ฅํ๋ค. ๋ํ $C = 0$ ์ด๋ผ๋ฉด ์ฐจ๊ณ ๊ฐ ์์ ๋ ์ํ์ด๋ฏ๋ก GOOD์ ์ถ๋ ฅํ๋ค. ์์ด ์์คํ์ ์ํํธ์จ์ด์ ํ์ฌ๋ ํ๋จ ๋ฐ์ดํฐ์ ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ก์ ๋, ์์์ ์ค๋ช ํ ๋ฐฉ์์ผ๋ก ์ฐจ๊ณ ์ ๋๋ฎ์ด๋ฅผ ํ๋จํ๋ A์จ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํด ๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ๋จ ๋ฐ์ดํฐ์ ์ $B$๊ฐ ์ฃผ์ด์ง๋ค. $(1 \leq B \leq 500)$ ๋ค์ $B$๊ฐ์ ์ค์ โ์ฐจ๊ณ ์ ๋ฎ์โ ํ๋จ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ $B$๊ฐ์ ์ค์ โ์ฐจ๊ณ ์ ๋์โ ํ๋จ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ๋จ ๋ฐ์ดํฐ๋ $3$๊ฐ ์ด์ $50$๊ฐ ์ดํ์ ๋นํธ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋์ผํ ํ๋จ ๋ฐ์ดํฐ๋ ์ฃผ์ด์ง์ง ์๋๋ค. ๋ค์ ์ค์ ์ค์๊ฐ ๋ฐ์ดํฐ์ ์ $N$๊ฐ๊ฐ ์ฃผ์ด์ง๋ค.$(1 \leq N \leq 1\,000)$ ๋ค์ $N$๊ฐ์ ์ค์ ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ง๋ค. ์ค์๊ฐ ๋ฐ์ดํฐ์ ๋นํธ์ ์๋ โ์ฐจ๊ณ ์ ๋ฎ์โ , โ์ฐจ๊ณ ์ ๋์โ ํ๋จ ๋ฐ์ดํฐ์ ์ต๋ ๋นํธ ์๋ณด๋ค ๊ฐ๊ฑฐ๋ ํฐ ์๋ก ์ฃผ์ด์ง๋ฉฐ, ์ต๋ ๋นํธ ์๋ $250$์ด๋ค.
์ถ๋ ฅ
$N$๊ฐ ์ค์ ๊ฑฐ์ณ ๊ฐ ์ค์๊ฐ ๋ฐ์ดํฐ์ ๋ํด ์๊ณ ๋ฆฌ์ฆ์ด ํ๋จํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
1
111
101
1
11110100101001101
์ถ๋ ฅ
LOW 1
์์ 2
์ ๋ ฅ
4
00000
10110
00110
1010
000
111
0010
10010
5
001000111110011000
1100111010001101
11001101001100000000
1110010010
1000001110010
์ถ๋ ฅ
LOW 5
GOOD
HIGH 1
LOW 5
LOW 5
My Sol
def check(txt, tl, part, pl):
ret = 0
for i in range(tl-pl+1):
if txt[i:i+pl] == part:
ret+=1
return ret
B = int(input())
LPS = [input() for _ in range(B)]
HPS = [input() for _ in range(B)]
T = int(input())
for _ in range(T):
sign = input()
sl = len(sign)
C = 0
for LP in LPS:
C += check(sign, sl, LP, len(LP))
for HP in HPS:
C -= check(sign, sl, HP, len(HP))
if not C: print('GOOD')
elif C > 0: print(f'HIGH {C}')
else: print(f'LOW {-C}')
๋นํธ๋ง์คํน์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ผ๋ก ํ ์ ์๋๋ฐ, ์ผ๋จ์ ๋ฌธ์์ด๋ก ์ฒ๋ฆฌํด์ ์ฝ๊ฒ ํ์๋ ๋ฌธ์ ์๋ค.
- B๋ฒ๋งํผ ๋ฎ์์ ์ธ์ํ๋ ๋จ์ด์ ๋์์ ์ธ์ํ๋ ๋จ์ด๋ฅผ ์ ์ฅํ๋ค.
- ์ฌ์ธ๋ค ๊ฐ๊ฐ๋ง๋ค ๊ฐ ๋จ์ด๋งํผ์ ๊ตฌ๊ฐ๋งํผ ์๋ผ ์ํธ ๋น๊ตํ๋ค.
- ์ด ์นด์ดํธ์ ๋์ ๊ฐ์ ๋น๊ตํ์ฌ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ