Lumpy Space Princess - Adventure Time
코딩테스트/파이썬 알고리즘 문제풀이 입문

[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 사과나무(다이아몬드)

yaebb_82 2023. 4. 28.

*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.

 

 

 

문제

현수의 농장은 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를 기준으로 전,후 로직을 다르게 진행)

 

 

 

반응형

댓글