*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.
문제
N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합을 출력합니다.
풀이
• 내 풀이
import sys
input = sys.stdin.readline
N = int(input())
square = list()
result = list()
for i in range(N):
square.append(list(map(int, input().split())))
# 열
for i in range(N):
total = 0
for j in range(N):
total += square[j][i]
result.append(total)
# 행
for i in range(N):
result.append(sum(square[i]))
# 대각선
left = right = 0
for i in range(N):
left += square[i][i]
right += square[i][(N-1)-i]
result.append(left)
result.append(right)
print(max(result))
• 답안 : Python
import sys
input = sys.stdin.readline
N = int(input())
square = [list(map(int, input().split())) for _ in range(N)]
result = -1e9 #-2147000000으로 해도 됨
# 행, 열
for i in range(N):
sum1 = sum2 = 0
for j in range(N):
sum1 += square[i][j] # 행
sum2 += square[j][i] # 열
if sum1 > result:
result = sum1
if sum2 > result:
result = sum2
# 대각선
sum1 = sum2 = 0
for i in range(N):
sum1 += square[i][i] # 왼쪽 대각선
sum2 += square[i][(N-1)-i] # 오른쪽 대각선
if sum1 > result:
result = sum1
if sum2 > result:
result = sum2
print(result)
• 답안 : Kotlin (내가 바꿔본 것 / 정확X)
import java.io.*
import java.util.*
fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))){
var N = readLine().toInt()
var square : MutableList<List<Int>> = mutableListOf()
var result = -2147000000
var sum1 = 0
var sum2 = 0
for(i in 0 until N) {
square.add(readLine().split(" ").map{ it.toInt() })
}
for(i in 0 until N) {
sum1 = 0
sum2 = 0
for(j in 0 until N) {
sum1 += square[i][j]
sum2 += square[j][i]
}
if(sum1 > result) result = sum1
if(sum2 > result) result = sum2
}
sum1 = 0
sum2 = 0
for(i in 0 until N) {
sum1 += square[i][i]
sum2 += square[i][N-1-i]
}
if(sum1 > result) result = sum1
if(sum2 > result) result = sum2
println(result)
}
- 최종 최댓값을 구하는 방법을 나는 리스트를 활용해서 구했고, 답안은 변수만을 활용해서 구했다.
- 또한, 나는 행/열/대각선 에 해당하는 로직을 각각 구현 했다면, 답안에서는 행열/대각선 으로 묶어서 for문의 개수를 줄이는 방식으로 구현했다.
- 리스트와 for문을 불필요하게 많이 생성하는 것은 좋지 않다는 것을 알게 되었다.
'💻 코딩테스트 > 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 곶감(모래시계) (0) | 2023.04.29 |
---|---|
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 사과나무(다이아몬드) (1) | 2023.04.28 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 수들의 합 (투포인터 알고리즘) (0) | 2023.04.28 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 두 리스트 합치기 (0) | 2023.04.27 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 카드 역배치 (0) | 2023.04.26 |