[BOJ][๐ŸŸก4][๋ฐฑ์ค€#25970] ํ˜„๋Œ€ ๋ชจ๋น„์Šค ์—์–ด ์„œ์ŠคํŽœ์…˜

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #25970


๋ฌธ์ œ

ํ˜„๋Œ€ ๋ชจ๋น„์Šค์˜ ์—์–ด์„œ์ŠคํŽœ์…˜์€ ๊ณ ์† ์ฃผํ–‰ ์‹œ ์ฐจ๊ณ ๋ฅผ ๋‚ฎ์ถ”์–ด ์กฐ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ณ , ๊ณต๊ธฐ ์ €ํ•ญ๋ ฅ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์žฅ์น˜๋‹ค. ๋น„ํฌ์žฅ ๋„๋กœ์—์„œ๋Š” ์ฐจ๊ณ ๋ฅผ ๋†’์—ฌ ์ฐจ์ฒด๋ฅผ ๋ณดํ˜ธํ•˜๋ฉฐ, ์Šน์ฐจ / ํ•˜์ฐจ / ํ™”๋ฌผ ์ ์žฌ ์‹œ์— ์ฐจ๊ณ ๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ํŽธ๋ฆฌํ•œ ํƒ‘์Šน / ํ•˜์ฐจ / ์ ์žฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋„์™€์ฃผ๋ฉฐ, ํ™”๋ฌผ ์ ์žฌ์™€ ์ƒ๊ด€์—†์ด ์ฐจ๊ณ ๋ฅผ ์œ ์ง€ํ•จ์œผ๋กœ์จ ์ตœ์ ์˜ ์ฃผํ–‰์„ ๊ตฌํ˜„ํ•œ๋‹ค. ์ด๋ฒˆ์— ํ˜„๋Œ€ ๋ชจ๋น„์Šค์— ์ž…์‚ฌํ•œ ์‹ ์ž… ๊ฐœ๋ฐœ์ž 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}')

๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ผ๋‹จ์€ ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ์‰ฝ๊ฒŒ ํ’€์—ˆ๋˜ ๋ฌธ์ œ์˜€๋‹ค.

  1. B๋ฒˆ๋งŒํผ ๋‚ฎ์Œ์„ ์ธ์‹ํ•˜๋Š” ๋‹จ์–ด์™€ ๋†’์Œ์„ ์ธ์‹ํ•˜๋Š” ๋‹จ์–ด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  2. ์‚ฌ์ธ๋“ค ๊ฐ๊ฐ๋งˆ๋‹ค ๊ฐ ๋‹จ์–ด๋งŒํผ์˜ ๊ตฌ๊ฐ„๋งŒํผ ์ž˜๋ผ ์ƒํ˜ธ ๋น„๊ตํ•œ๋‹ค.
  3. ์ด ์นด์šดํŠธ์˜ ๋ˆ„์ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ