문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/258707
이 문제의 핵심은 두 개의 카드를 뽑았을 때 합이 N + 1인 경우는 각각의 카드에 대해서 하나뿐이라는 것입니다.
ex) N = 10일 때 [1, 9], [2, 8], [3, 7], ...
알고리즘은 아래와 같습니다.
1. 처음에 뽑은 카드는 모두 hands에 저장하고 라운드를 진행하며 뽑은 카드들은 모두 draw에 저장합니다.
2. 라운드마다 draw에 신규 카드를 순차적으로 두 장씩 저장하고 hands만으로 N + 1을 만들지 못할 때 draw에 저장된 카드를 활용하는 방향으로 진행합니다. (일단 저장해두고 이후 버릴지 coin을 사용하여 뽑을지 정합니다.)
2.1 최대한 hands에 저장한 카드들의 조합으로 N + 1을 만듭니다.
2.2 hands만으로 조합을 하지 못할 경우 hands와 draw 조합으로 N+1을 만들고
2.3 2.2까지 안되면 신규로 뽑은 카드들 즉, draw에 저장한 카드들의 조합으로 N+1을 만듭니다.
2.4 2.1 ~ 2.3 모두 성립하지 않을 경우 더 이상 라운드를 진행할 수 없으므로 해당 라운드를 반환합니다.
개발환경: Programmers IDE
지적, 조언, 질문 환영합니다! 질문 남겨주세요~
반응형
'알고리즘 > programmers' 카테고리의 다른 글
[Programmers] 양과 늑대 (2) | 2024.01.14 |
---|---|
[Programmers] 산 모양 타일링 (0) | 2024.01.11 |
[Programmers] 주사위 고르기 (0) | 2024.01.07 |
[Programmers] 도넛과 막대 그래프 (4) | 2024.01.06 |
[Programmers] 가장 많이 받은 선물 (0) | 2024.01.05 |