728x90
[๋ฌธ์ ๋งํฌ] ๐
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
ํ์ด
๐ก ์ฌ๋ผ์ด์ฑ, ํ ์ด ๋ณํ, sum(), max() ์ด์ฉ
๐ ๊ฐ ํ, ์ด์ ํฉ ๊ตฌํ๋ ๋ฐฉ๋ฒ
for i in range(100):
sum_num = sum(board[i][:])
- [ : ]
- ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ๋ผ์ด์ฑ ํ๋ค.
- [5 : ] = 5๋ถํฐ ๋๊น์ง ์ฌ๋ผ์ด์ฑ, [5 : 7] = 5๋ถํฐ 6๊น์ง ์ฌ๋ผ์ด์ฑ, [ : 8] = ์ฒ์๋ถํฐ 7๊น์ง ์ฌ๋ผ์ด์ฑ
- sum(board[i][:])
- i๊ฐ 0๋ถํฐ 99๊น์ง ์์ง์ด๋ฏ๋ก ๊ฐ ํ์ ์ ์ฒด๋ฅผ ๊ฐ์ ธ์์ ํฉ๊ณ๋ฅผ ๊ตฌํ๋ค.
๐ ํ ์ด์ ์๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ
new_board = list(map(list, zip(*board)))
- zip(*board)
- zip์ ์ฌ๋ฌ ๊ฐ์ ์ดํฐ๋ฌ๋ธ(iterable, ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด)์ ๋ณ๋ ฌ๋ก ๋ฌถ์ด์ ๊ฐ ์์น์ ์๋ ์์๋ค์ ํํ(tuple)๋ก ๋ฐํํ๋ค.
- ์ฌ๊ธฐ์ *board๋ ๋ฆฌ์คํธ board์ ๊ฐ ํ์ ๊ฐ๋ณ์ ์ผ๋ก zip์ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค. ์ฆ, *board๋ board์ ๋ชจ๋ ํ์ ๊ฐ๊ฐ์ ์ธ์๋ก ์ ๋ฌํ๋ค.
- zip(*board)์ ๊ฒฐ๊ณผ๋ ๊ฐ ์ด์ ํํ๋ก ๋ฌถ์ ์ดํฐ๋ ์ดํฐ๊ฐ ๋๋ค.
- map(list, zip(*board))
- zip(*board)์ ๊ฒฐ๊ณผ๋ ํํ์ด๋ฏ๋ก, ์ด๋ฅผ ๋ฆฌ์คํธ๋ก ๋ณํํด์ผ ํ๋ค.
- map(list, zip(*board))๋ zip(*board)์ ๊ฐ ํํ์ list๋ก ๋ณํํ์ฌ ์ดํฐ๋ ์ดํฐ๋ก ๋ฐํํ๋ค.
- list(map(list, zip(*board))):
- map์ ๊ฒฐ๊ณผ๋ ์ดํฐ๋ ์ดํฐ์ด๊ธฐ ๋๋ฌธ์, list()๋ก ๊ฐ์ธ ์ต์ข ์ ์ผ๋ก list ๊ฐ์ฒด๋ก ๋ณํํ๋ค.
- ์ต์ข ๊ฒฐ๊ณผ๋ ํ๊ณผ ์ด์ด ์ ํ๋ 2์ฐจ์ ๋ฆฌ์คํธ๊ฐ ๋๋ค.
๐ ์ต๋๊ฐ ๊ตฌํ๋ ๋ฐฉ๋ฒ
result = max(row_max, col_max, dia_max)
- row_max, col_max, dia_max
- ํ์ ํฉ ์ค์์ ์ต๋๊ฐ, ์ด์ ํฉ ์ค์์ ์ต๋๊ฐ, ๋๊ฐ์ ์ ํฉ ์ค์์ ์ต๋๊ฐ์ด๋ค.
- max()
- ์ต๋๊ฐ์ ๋ฐํํ๋ ํ์ด์ฌ์ ๋ด์ฅ ํจ์๋ค.
- ์ธ์๋ก ์ ์๋ฅผ ์ ๋ฌํ๋ฉด ์ต๋๊ฐ์ ๋ฐํํ๋ค.
Solution
def calc(board):
max_sum = 0
for i in range(100):
sum_num = sum(board[i][:]) # 0~99 ์ธ๋ฑ์ค์ ์ ์ฒด ํฉ ๊ตฌํ๊ธฐ
max_sum = max(sum_num, max_sum) # ํฉ๊ณ์ ์ต๋๊ฐ ๊ตฌํ๊ธฐ
return max_sum
def diagonal(board):
right_sum, left_sum = 0, 0
for i in range(100):
right_sum += board[i][i] # ์ค๋ฅธ ๋๊ฐ
left_sum += board[i][99 - i] #์ผ ๋๊ฐ
return max(right_sum, left_sum)
for _ in range(10):
test_case = int(input())
board = [list(map(int, input().split())) for _ in range(100)]
row_max = calc(board) # ํ์ ํฉ
# ํ ์ด ๋ณํ ํ ์ด์ ํฉ
new_board = list(map(list, zip(*board)))
col_max = calc(new_board)
# ๋๊ฐ์ ์ต๋๊ฐ
dia_max = diagonal(board)
result = max(row_max, col_max, dia_max)
print(f"#{test_case} {result}")
์ฝ๋์ ํจ์จ์ฑ๊ณผ ๊ฐ๋ ์ฑ ๋ฌธ์ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
์์ ํฌ์ธํธ
- calc ํจ์์์ ์ ์ฒด ํฉ ๊ณ์ฐ ๋ฐฉ์ ๋จ์ํ
- sum(board[i][:]) ๋์ sum(board[i])๋ก๋ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. ๋ฆฌ์คํธ์ ์ ์ฒด๋ฅผ ๋์์ผ๋ก ์ฌ๋ผ์ด์ฑ [:]์ ์ฌ์ฉํ๋ ๋์ , ๋ฆฌ์คํธ ์์ฒด๋ฅผ sum์ ์ ๋ฌํด๋ ๋ฌด๋ฐฉํ๋ค.
- diagonal ํจ์์ ์ค๋ณต๋ max ๊ตฌ๋ฌธ ์ ๊ฑฐ
- ํ์ฌ ๋๊ฐ์ ์ ํฉ ์ค ํฐ ๊ฐ์ ๋ฐํํ๋ ๋ถ๋ถ์์ max ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ํ์ง๋ง ํธ์ถ๋ถ์์ ์ด๋ฏธ ์ต๋๊ฐ์ ๋น๊ตํ๊ณ ์์ผ๋ฏ๋ก diagonal ํจ์๋ ๋ ๋๊ฐ์ ์ ํฉ์ ๊ตฌํ๊ธฐ๋ง ํ๊ณ , result = max(row_max, col_max, right_sum, left_sum)๋ก ์ต๋๊ฐ์ ๊ฒฐ์ ํ ์ ์.
- ์ฃผ์์ ์ถ๊ฐํ์ฌ ์ฝ๋ ๊ฐ๋
์ฑ ํฅ์
- ๊ฐ ์น์ ์ ๋ํด ๋ช ํํ ์ฃผ์์ ๋ฌ๋ฉด ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค.
- ์ต์ข
์ ์ผ๋ก ์ต๋๊ฐ์ ๋ฐํํ ๋ ๋๊ฐ์ ํฉ์ ๋ ๊ฐ์ง ๊ฐ์ ๋ช
์์ ์ผ๋ก ์ ๋ฌ
- diagonal ํจ์๊ฐ ๋ ๊ฐ์ ๋ฐํํ๊ฒ ๋ณ๊ฒฝํ๊ณ , ํธ์ถ๋ถ์์ ์ต์ข max ๋น๊ต๋ฅผ ํ ์ ์๋๋ก ํ๋ค.
์ต์ ํ๋ ์ฝ๋
def calc(board):
max_sum = 0
# ๊ฐ ํ์ ํฉ์ ๊ณ์ฐํ์ฌ ์ต๋๊ฐ ์ฐพ๊ธฐ
for i in range(100):
sum_num = sum(board[i]) # ๊ฐ ํ์ ํฉ ๊ตฌํ๊ธฐ
max_sum = max(sum_num, max_sum) # ํ์ฌ ํ ํฉ๊ณ์ ์ต๋๊ฐ ๋น๊ต
return max_sum
def diagonal(board):
right_sum, left_sum = 0, 0
# ์ค๋ฅธ์ชฝ ๋๊ฐ์ ๊ณผ ์ผ์ชฝ ๋๊ฐ์ ์ ํฉ์ ๊ตฌํ๊ธฐ
for i in range(100):
right_sum += board[i][i] # ์ค๋ฅธ์ชฝ ๋๊ฐ์
left_sum += board[i][99 - i] # ์ผ์ชฝ ๋๊ฐ์
return right_sum, left_sum
# ํ
์คํธ ์ผ์ด์ค ์คํ
for _ in range(10):
test_case = int(input())
board = [list(map(int, input().split())) for _ in range(100)]
# ํ์ ์ต๋ ํฉ
row_max = calc(board)
# ํ๊ณผ ์ด์ ๋ณํํ ์๋ก์ด ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์ด์ ์ต๋ ํฉ
col_max = calc(list(map(list, zip(*board))))
# ๋๊ฐ์ ์ ๋ ํฉ
right_sum, left_sum = diagonal(board)
# ๋ชจ๋ ์ต๋๊ฐ ์ค ๊ฐ์ฅ ํฐ ๊ฐ
result = max(row_max, col_max, right_sum, left_sum)
print(f"#{test_case} {result}")
๐ฉ๐ป ํ๊ณ
๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋ง์ ๊ฑฐ ๋นผ๊ณ ๋ ์ฝ๊ฒ ํ ์ ์์๋ค. ๊ฐ์ ํจ์๋ฅผ ๋ฐ๋ก ๋๋ ์ ๊ณ์ฐํด์ ๋ณด๊ธฐ์๋ ํธํ ๊ฒ ๊ฐ๋ค.
๊ฐ๋ ์ฑ๊ณผ ๋ถํ์ํ ์ฝ๋๊ฐ ์กฐ๊ธ ๋ค์ด๊ฐ ์์์ง๋ง ๊ฝค ์ ํผ ๊ฒ ๊ฐ๋ค.
728x90
'๐งฉ Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SWEA] 3142. ์์ค์ด์ ์ ๋นํ ๋ฟ์ ์ฒ (Python/D3) (0) | 2024.10.26 |
|---|---|
| [SWEA] 10200. ๊ตฌ๋ ์ ์ ์ (Python/D3) (0) | 2024.10.26 |
| [SWEA] 14692. ํต๋๋ฌด ์๋ฅด๊ธฐ (Python/D3) (0) | 2024.10.25 |
| [SWEA] 1216. [S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 3์ผ์ฐจ - ํ๋ฌธ2 (Python/D3) (0) | 2024.10.25 |
| [SWEA] 6692. ๋ค์์ด์ ์๊ธ ์์ (Python/D3) (0) | 2024.10.24 |