Skip to content

[PGS] 땅따먹기 - #58

Open
been12151 wants to merge 10 commits into
mainfrom
week3/땅따먹기

Hidden character warning

The head ref may contain hidden characters: "week3/\ub545\ub530\uba39\uae30"
Open

[PGS] 땅따먹기#58
been12151 wants to merge 10 commits into
mainfrom
week3/땅따먹기

Conversation

@been12151

Copy link
Copy Markdown
Owner

🍪 문제 이름

Resolve: 땅따먹기

🍊 문제 정의

input

  • land : N행 4열로 이루어진 2차원 배열. 각 칸에는 점수가 쓰여 있음 (N은 100,000 이하의 자연수, 점수는 100 이하의 자연수)

output

  • 1행부터 한 행씩 내려오면서 각 행에서 한 칸씩 밟을 때, 같은 열을 연속해서 밟지 않는 조건 하에 얻을 수 있는 점수의 최댓값

예시

land result
[[1,2,3,5],[5,6,7,8],[4,3,2,1]] 16

🍑 알고리즘 설계

DP로 풀이. land[i][j]에 이전 행에서 j열을 제외한 나머지 3칸의 최댓값을 누적해서 더해감.
land[i-1][:j] + land[i-1][j+1:]로 j열을 제외한 슬라이싱을 만들고, 그 중 max()를 현재 칸에 더함.
마지막 행까지 누적이 완료되면 max(land[-1])로 최댓값을 반환.

def solution(land):
    for i in range(1, len(land)):
        for j in range(4):
            land[i][j] += max(land[i-1][:j] + land[i-1][j+1:])

    return max(land[-1])

🥝 최악 수행 시간 복잡도

  • O(n) (n = land의 행 수)
  • 행을 한 번 순회(O(n))하면서 매 행마다 4칸(고정 상수)에 대해 슬라이싱과 max()를 수행하므로 전체 O(n)

🍰 특이 사항 (Optional)

land[i-1][:j] + land[i-1][j+1:]로 리스트 슬라이싱을 활용해 j열을 제외하는 부분으로 했는데, 열이 늘어나면 문제가 생길수도...

@been12151
been12151 requested review from gayo73 and yangyeeeun July 6, 2026 13:31
@been12151 been12151 self-assigned this Jul 6, 2026
@been12151 been12151 linked an issue Jul 6, 2026 that may be closed by this pull request
@yangyeeeun

Copy link
Copy Markdown
Collaborator

다음줄 같은열에 접근할 수 없으니까 그 열은 제외하고 리스트를 만드는 방법이 있군요!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[PGS] 땅따먹기 / level 2

3 participants