๐Ÿงฉ Algorithm/SWEA

[SWEA] 1216. [S/W ๋ฌธ์ œํ•ด๊ฒฐ ๊ธฐ๋ณธ] 3์ผ์ฐจ - ํšŒ๋ฌธ2 (Python/D3)

devCloud 2024. 10. 25. 13:11
728x90

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

 

SW Expert Academy

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

swexpertacademy.com

 


ํ’€์ด

ํšŒ๋ฌธ ๊ธธ์ด ๊ณ„์‚ฐ

ํฐ ๊ธธ์ด๋ถ€ํ„ฐ ์ค„์—ฌ๊ฐ€๋ฉด์„œ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜๊ณ  ํšŒ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•ด ์ฒซ ๋ฒˆ์งธ ํšŒ๋ฌธ์„ ์ฐพ์œผ๋ฉด ํ•ด๋‹น ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

ํ–‰ ์—ด ๋ณ€ํ™˜ ๋ฐฉ๋ฒ• - zip()

new_board = [list(i) for i in zip(*board)]

 

 

Solution

def palindrome(board):
    length, max_len = 0, 0
    for i in range(100):
        for j in range(100):
            for k in range(100):
                word_slice = board[i][j:j + k]

                if word_slice == word_slice[::-1]:
                    length = len(word_slice)

                if max_len < length:
                    max_len = length
    return max_len

for _ in range(10):
    test_case = int(input())
    board = [input().strip() for _ in range(100)]
    row_len = palindrome(board)
    #ํ–‰ ์—ด ๋ณ€ํ™˜
    new_board = [list(i) for i in zip(*board)]
    col_len = palindrome(new_board)
    if row_len > col_len:
        result = row_len
    else:
        result = col_len

    print(f"#{test_case} {result}")

 

์œ„ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋Š” ๋งž๋Š” ํŽธ์ด์ง€๋งŒ, ํ˜„์žฌ ์ฝ”๋“œ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์„ฑ๋Šฅ ๋ฌธ์ œ์™€ ์ž ์žฌ์  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ 100x100 ๋ฐฐ์—ด์„ ๋Œ€์ƒ์œผ๋กœ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๊ฒ€์‚ฌํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ƒ๋‹นํžˆ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ์€ ๋ฌธ์ œ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฐœ์„  ์‚ฌํ•ญ์ด๋‹ค.

 

๊ฐœ์„  ์‚ฌํ•ญ

  • ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต๋ฌธ ์ œ๊ฑฐ
    • for k in range(100):๋Š” board[i][j:j + k]๋กœ ๊ณ„์†ํ•ด์„œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜์ง€๋งŒ, ์ด ๋ฐฉ์‹์„ ์œ ์ง€ํ•˜๋ฉด ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋งค๋ฒˆ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•˜๋ฏ€๋กœ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.
    • ๋Œ€์‹ , ๊ธธ์ด๊ฐ€ ํฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฒ˜์Œ์œผ๋กœ ํšŒ๋ฌธ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๊ทธ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด for k in range(100, 0, -1)๋กœ ์ˆ˜์ •ํ•˜์—ฌ ํฐ ๊ธธ์ด๋ถ€ํ„ฐ ์ค„์—ฌ๊ฐ€๋ฉฐ ํšŒ๋ฌธ์„ ์ฐพ์œผ๋ฉด, ์ฒซ ํšŒ๋ฌธ์„ ์ฐพ์„ ๋•Œ ๋ฐ”๋กœ ๊ทธ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ“๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค.
  • length ๋ณ€์ˆ˜์˜ ๋ถˆํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ
    • length๋Š” max_len์ด ๊ฐฑ์‹ ๋  ๋•Œ๋งŒ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์กฐ๊ฑด๋ฌธ์„ ๊ฐ„์†Œํ™”ํ•˜์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์†Œํ•œ ๋…ผ๋ฆฌ ๊ฐœ์„ 
    • ๊ฒฐ๊ณผ๋ฅผ row_len๊ณผ col_len ์ค‘์—์„œ ๋” ํฐ ๊ฐ’์œผ๋กœ ๋ฐ”๋กœ ํ• ๋‹นํ•˜๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ตœ์ ํ™”๋œ ์ฝ”๋“œ

def palindrome(board):
    max_len = 0
    for i in range(100):
        for j in range(100):
            for k in range(100, 0, -1): #ํฐ ๊ธธ์ด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ฒ€์‚ฌ
                if j + k <= 100:
                    word_slice = board[i][j:j + k]

                    if word_slice == word_slice[::-1]: # ํšŒ๋ฌธ ํ™•์ธ
                        max_len = max(max_len, k) # ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
                        break # ์ตœ๋Œ€ ๊ธธ์ด ์ฐพ์•˜์œผ๋ฏ€๋กœ ๋” ์งง์€ ๊ธธ์ด๋Š” ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์Œ
    return max_len

for _ in range(10):
    test_case = int(input())
    board = [input().strip() for _ in range(100)]
    row_len = palindrome(board)
    #ํ–‰ ์—ด ๋ณ€ํ™˜
    new_board = [list(i) for i in zip(*board)]
    col_len = palindrome(new_board)
    result = max(row_len, col_len)
    print(f"#{test_case} {result}")

 

 

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

์ €๋ฒˆ์— ํšŒ๋ฌธ 1 ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋˜ ์ œ๋Œ€๋กœ ํ•ด๊ฒฐ ๋ชปํ• ๊นŒ๋ด ๊ฑฑ์ •ํ–ˆ๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ ๋ฌธ๋“ ํ–‰ ์—ด์„ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์ง€ ์•Š์„๊นŒ ํ•˜๊ณ  ์ฐพ์•„๋ดค๋Š”๋ฐ ์ •๋ง ์žˆ์—ˆ๋‹ค. ๋•๋ถ„์— ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‹ค.!! 

๊ณ ๋ คํ•ด์•ผํ–ˆ๋˜ ๊ฑด ํšŒ๋ฌธ์˜ ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ ธ์žˆ์ง€ ์•Š์•„์„œ ์ผ์ผ์ด ๊ธธ์ด๋ฅผ ์กฐ์ •ํ•ด๊ฐ€๋ฉฐ ๋ชจ๋‘ ๊ฒ€์‚ฌ ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค. 3์ค‘ for๋ฌธ๊นŒ์ง€ ๋Œ๋ ค์„œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ปค์กŒ์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๋‹ˆ๊น ๊ธฐ์กด๋ณด๋‹ค ์ ˆ๋ฐ˜์ด๋‚˜ ์ž‘์•„์กŒ๋‹ค. ์•ž์œผ๋ก  ์‹œ๊ฐ„๋ณต์žก๋„๋„ ๊ณ ๋ คํ•ด๊ฐ€๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค.

 


 

728x90