코딩테스트/파이썬 알고리즘 문제풀이 입문
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 사과나무(다이아몬드)
*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.
문제
현수의 농장은 N*N 격자판으로 이루어져 있으며, 각 격자 안에는 한 그루의 사과나무가 심어져 있다. N의 크기는 항상 홀수이다. 가을이 되어 사과를 수확해야 하는데 현수는 격자판 안의 사과를 수확할 때 다이아몬드 모양의 격자판만 수확하고 나머지 격자 안의 사과는 새들을 위해서 남겨 놓는다. 현수가 수확하는 사과의 총 개수를 출력하세요.
풀이
• 답안 : Python
import sys
input = sys.stdin.readline
N = int(input())
trees = [list(map(int, input().split())) for _ in range(N)]
total = 0
start = end = N//2
for i in range(N):
for j in range(start, end+1):
total += trees[i][j]
if i < (N//2):
start -= 1
end += 1
else:
start += 1
end -= 1
print(total)
• 답안 : Kotlin (내가 바꿔본 것 / 정확X)
import java.io.*
import java.util.*
fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))){
var N = readLine().toInt()
var trees : MutableList<List<Int>> = mutableListOf()
var total = 0
var start = N/2
var end = N/2
for(i in 0 until N) {
trees.add(readLine().split(" ").map { it.toInt() })
}
for(i in 0 until N) {
for(j in start until end+1) {
total += trees[i][j]
}
if(i < N/2) {
start -= 1
end += 1
} else {
start += 1
end -= 1
}
}
println(total)
}
- 처음 문제를 보고 for문을 돌리면서 슬라이싱 하는 방법으로 각 행마다의 합을 구하는 방식으로 구현하는 쪽으로 생각했었다.
- 답안에서는 포인트로 start와 end를 지정해서 2중 for문을 돌려서 구현했다. (N/2를 기준으로 전,후 로직을 다르게 진행)
반응형
'코딩테스트 > 파이썬 알고리즘 문제풀이 입문' 카테고리의 다른 글
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 봉우리 (0) | 2023.05.02 |
---|---|
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 곶감(모래시계) (0) | 2023.04.29 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 격자판 최대합 (1) | 2023.04.28 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 수들의 합 (투포인터 알고리즘) (0) | 2023.04.28 |
[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 두 리스트 합치기 (0) | 2023.04.27 |
댓글