๐Ÿงฉ Algorithm/SWEA

[SWEA] 1959. ๋‘ ๊ฐœ์˜ ์ˆซ์ž์—ด (Python/D2)

devCloud 2024. 10. 18. 18:50
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‰ 

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com


์„ค๋ช…

N ๊ฐœ์˜ ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋œ ์ˆซ์ž์—ด Ai (i=1~N) ์™€ M ๊ฐœ์˜ ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋œ ์ˆซ์ž์—ด Bj (j=1~M) ๊ฐ€ ์žˆ๋‹ค. ์•„๋ž˜๋Š” N =3 ์ธ Ai ์™€ M = 5 ์ธ Bj ์˜ ์˜ˆ์ด๋‹ค.


Ai ๋‚˜ Bj ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์›€์ง์—ฌ์„œ ์ˆซ์ž๋“ค์ด ์„œ๋กœ ๋งˆ์ฃผ๋ณด๋Š” ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ๋” ๊ธด ์ชฝ์˜ ์–‘๋์„ ๋ฒ—์–ด๋‚˜์„œ๋Š” ์•ˆ ๋œ๋‹ค.


์„œ๋กœ ๋งˆ์ฃผ๋ณด๋Š” ์ˆซ์ž๋“ค์„ ๊ณฑํ•œ ๋’ค ๋ชจ๋‘ ๋”ํ•  ๋•Œ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋ผ. ์œ„ ์˜ˆ์ œ์˜ ์ •๋‹ต์€ ์•„๋ž˜์™€ ๊ฐ™์ด 30 ์ด ๋œ๋‹ค.

[์ œ์•ฝ ์‚ฌํ•ญ]
N ๊ณผ M์€ 3 ์ด์ƒ 20 ์ดํ•˜์ด๋‹ค.

 

ํ’€์ด

๋ฆฌ์ŠคํŠธ ์ค‘ ๊ธธ์ด๊ฐ€ ์งง์€ ๊ฒƒ๊ณผ ๊ธด ๊ฒƒ์„ ๊ตฌ๋ถ„

min_list = min(aList, bList, key=len)
max_list = max(aList, bList, key=len)

 

  • key = len์€ ๋น„๊ตํ•  ๋•Œ ๊ฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๋„๋ก ์ง€์ •ํ•œ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ํ™•์ธ

    while cnt <= len(max_list) - len(min_list):
        sum = 0
        for i in range(len(min_list)):
            sum += min_list[i] * max_list[i + cnt] #๊ณฑํ•œ ๋’ค ํ•ฉ๊ณ„
        max_sum = max(max_sum, sum) #์ตœ๋Œ€๊ฐ’ ์ €์žฅ
        cnt += 1
  • b๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊นŒ์ง€ ํ™•์ธํ•˜๊ณ ์ž ํ•  ๋•Œ,
  • cnt๊ฐ€ ํ˜„์žฌ 2์ด๊ณ , i๊ฐ€ 2์ผ ๋•Œ
  • i + cnt, ์ฆ‰ 2 + 2 = 4๊ฐ€ ๋˜๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊นŒ์ง€ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

cnt๊ฐ€ 0์ผ ๋•Œ 

 

 

cnt๊ฐ€ 1์ผ ๋•Œ

 

 

  • max_sum์—๋Š” ๊ณฑํ•ด์„œ ๋”ํ•œ ๋ˆ„์ ํ•ฉ๊ณผ ํ˜„์žฌ ์ตœ๋Œ€๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋” ํฐ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  cnt๋ฅผ ์ฆ๊ฐ€ํ•œ๋‹ค. cnt๊ฐ€ b์—์„œ a๋ฅผ ๋บ€ ๊ฐ’๊ณผ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€๋งŒ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

 

Solution

test_case = int(input())
for tc in range(1, test_case + 1):
    a, b = map(int, input().split())
    aList = list(map(int, input().split()))
    bList = list(map(int, input().split()))

    min_list = min(aList, bList, key=len)
    max_list = max(aList, bList, key=len)
    max_sum = 0
    cnt = 0
    while cnt <= len(max_list) - len(min_list):
        sum = 0
        for i in range(len(min_list)):
            sum += min_list[i] * max_list[i + cnt] #๊ณฑํ•œ ๋’ค ํ•ฉ๊ณ„
        max_sum = max(max_sum, sum) #์ตœ๋Œ€๊ฐ’ ์ €์žฅ
        cnt += 1

    print("#%d %d" %(tc, max_sum))

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

max์™€ min์„ ์“ธ ๋•Œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ๋ถ€์ ์ ˆํ•˜๋‹ค. min()๊ณผ max()๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  ๊ทธ๋ƒฅ ์ผ๋‹ค๊ฐ€ ์ฒ˜์Œ ์ œ์ถœ ๋•Œ ์‹คํŒจํ–ˆ๋‹ค. min() ๋ฉ”์„œ๋“œ์— ๋ฆฌ์ŠคํŠธ๋งŒ ๋„˜๊ธฐ๋ฉด ๊ทธ๋ƒฅ ๊ธธ์ด ์ƒ๊ด€์—†์ด ๋ฐ˜ํ™˜๋œ๋‹ค. ๋ฌด์Šจ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฑด์ง„ ๋ชจ๋ฅด๊ฒ ๋‹ค. 

๋ฆฌ์ŠคํŠธ ์š”์†Œ์˜ ๊ธธ์ด๋กœ ํŒ๋ณ„ํ•˜๊ณ  ์‹ถ์œผ๋ฉด key=len์„ ์ธ์ž๋กœ ๋„˜๊ธฐ๋ฉด ๋œ๋‹ค.


 

728x90