공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 프로그래머스. 카드 게임 (Level 4)

inspirit941 2020. 2. 17. 14:20
반응형

https://programmers.co.kr/learn/courses/30/lessons/42896

 

코딩테스트 연습 - 카드 게임 | 프로그래머스

카드게임이 있다. 게임에 사용하는 각 카드에는 양의 정수 하나가 적혀있고 같은 숫자가 적힌 카드는 여러 장 있을 수 있다. 게임방법은 우선 짝수개의 카드를 무작위로 섞은 뒤 같은 개수의 두 더미로 나누어 하나는 왼쪽에 다른 하나는 오른쪽에 둔다. 각 더미의 제일 위에 있는 카드끼리 서로 비교하며 게임을 한다. 게임 규칙은 다음과 같다. 지금부터 왼쪽 더미의 제일 위 카드를 왼쪽 카드로, 오른쪽 더미의 제일 위 카드를 오른쪽 카드로 부르겠다. 1. 언제든지

programmers.co.kr

table[left_idx][right_idx] = left에서 idx만큼 빼내고, right에서 idx만큼 빼냈을 때의 최댓값

으로 점화식을 세운 것까지는 괜찮았는데,

 

조건에 맞게 table 값을 업데이트하는 코드를 작성하는 데 너무 오래 걸렸다.

index가 0부터 시작되다 보니, 초기값을 생성하는 데 꽤나 골치가 아팠어서.

 

결국 리스트 맨 앞에 초기값을 위해 insert(0, 0) 을 넣어서 해결했다.

 

1. 왼쪽 카드만 버릴 경우의 값, 왼쪽 오른쪽 둘 다 버릴 경우의 값 중 최댓값을 구한다

table[l_idx][r_idx] = max(table[l_idx-1][r_idx-1], table[l_idx-1][r_idx])

 

2. 이 값 중에서 오른쪽 카드만 버릴 수 있는 경우, 오른쪽 카드의 값을 더해준다.

if left[l_idx] > right[r_idx]: table[l_idx][r_idx] = max(table[l_idx][r_idx], table[l_idx][r_idx-1] + right[r_idx])

 

맨 마지막 값을 리턴하면 된다.

 

 

반응형