[python] 백준 11062번 : 카드게임

2025. 5. 26. 17:03·Algorithms/백준
반응형

 

 

 

 

 

 

 

 

https://www.acmicpc.net/problem/11062

 

난이도: G3


문제


근우와 명우는 재미있는 카드 게임을 하고 있다. N개의 카드가 일렬로 놓여 있다. 각 카드에는 점수가 적혀있다. 근우부터 시작하여 번갈아가면서 턴이 진행되는데 한 턴에는 가장 왼쪽에 있는 카드나 가장 오른쪽에 있는 카드를 가져갈 수 있다. 카드가 더 이상 남아있지 않을 때까지 턴은 반복된다. 게임의 점수는 자신이 가져간 카드에 적힌 수의 합이다.

근우와 명우는 서로 자신의 점수를 가장 높이기 위해 최선의 전략으로 게임에 임한다. 놓여있는 카드의 개수 N과 카드가 놓여있는 상태가 주어졌을 때 근우가 얻는 점수를 구하는 프로그램을 작성하시오.

예를 들어 카드가 [4, 3, 1, 2]로 놓여있다고 하자. 근우는 처음에 4가 적힌 카드를 가져가고, 명우는 3이 적힌 카드를 가져간다. 그리고 근우는 2가 적힌 카드를 가져가고, 명우는 마지막으로 1이 적힌 카드를 가져간다. 이때 근우와 명우는 최선의 전략으로 임했으며, 근우가 얻는 점수는 6이다.

 

입력


입력의 첫 줄에는 테스트케이스의 수 T(1 ≤ T ≤ 50)가 주어진다.

각 테스트케이스 마다 첫 줄에는 카드의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 두 번째 줄에는 N개의 자연수가 공백으로 구분되어 주어지는데, i번째로 주어지는 수는 왼쪽에서 i번째에 놓인 카드에 적힌 수를 의미한다. 카드에 적혀있는 수는 1이상 10,000이하다.

 

출력


각 테스트케이스마다 근우와 명우가 최선의 전략으로 임할 때 근우가 얻게되는 점수를 줄로 구분하여 출력한다.

예제 입력

2
4
1 2 5 2
9
1 1 1 1 2 2 2 2 2

예제 출력

6
8

풀이


dp문제이다.

dp[i][j] = i번쨰카드부터 j번째 카드가 있을 때, 근우가 고를 수 있는 최대 합.

이때, dp배열을 하나 더 추가해 근우, 명우의 dp배열을 따로 두어도 괜찮지만

근우의 dp배열만 두고, 명우 차례일 때 dp[i][j]를 구할 때는 dp[i][j]가 최소가 될 수 있는 경우를 구하면 된다.

 

※ plag를 통해 근우차례인지 명우차례인지 구분을 해야 함

제출코드

import sys
input=sys.stdin.readline
T=int(input())
for _ in range(T):
    N=int(input())
    li=list(map(int,input().split()))
    dp=[[0]*(N) for _ in range(N)]

    plag=1 if N%2==1 else 0
    for total_card in range(N):
        for i in range(N-total_card):
            if total_card==0:
                dp[i][i+total_card]=li[i] if plag else 0
            elif plag:
                dp[i][i+total_card]=max(dp[i+1][i+total_card]+li[i],dp[i][i+total_card-1]+li[i+total_card])
            else:
                dp[i][i+total_card]=min(dp[i+1][i+total_card],dp[i][i+total_card-1])
        plag= not plag
    print(dp[0][N-1],dp[0])

 


틀린 부분이 있거나 인용한 부분에 대해 문제가 있을 시
댓글로 알려주시면 감사하겠습니다.
반응형

'Algorithms > 백준' 카테고리의 다른 글

[python] 백준 1219번 : 오민식의 고민  (1) 2025.06.13
[python] 백준 3020번: 개똥벌레  (0) 2025.06.10
[python] 백준 14621번 : 나만 안되는 연애  (0) 2025.05.20
[python] 백준 13904번 : 과제  (0) 2025.05.16
[Python] 백준 16562번 : 친구비  (0) 2025.05.13
'Algorithms/백준' 카테고리의 다른 글
  • [python] 백준 1219번 : 오민식의 고민
  • [python] 백준 3020번: 개똥벌레
  • [python] 백준 14621번 : 나만 안되는 연애
  • [python] 백준 13904번 : 과제
wwwjong
wwwjong
wwwjong 님의 블로그 입니다.
  • wwwjong
    wwwjong 님의 블로그
    wwwjong
  • 전체
    오늘
    어제
    • 분류 전체보기 (42)
      • Programming (12)
        • 트러블슈팅 (3)
        • Dev notes (9)
      • CS (2)
        • Infra (2)
      • 개발환경 (6)
        • Ubuntu (6)
      • Algorithms (15)
        • 백준 (8)
        • Algorithm (3)
        • 코드트리 (3)
        • Programmers (1)
      • Study (6)
        • 면접을 위한 CS 전공지식 노트 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    skala
    코테공부
    docker
    ubuntu
    Jenkins
    LLM
    면접을 위한 CS 전공지식 노트
    Nginx
    딥러닝
    트랜스포머
    백준
    ubuntu server
    computer science
    코딩테스트
    CS
    Server
    코드트리
    transformer
    docker compose
    AI
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.1
wwwjong
[python] 백준 11062번 : 카드게임
상단으로

티스토리툴바