알고리즘/programmers

[Programmers] n + 1 카드게임

꾸준함. 2024. 1. 9. 11:19

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/258707

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이 문제의 핵심은 두 개의 카드를 뽑았을 때 합이 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  

 

지적, 조언, 질문 환영합니다! 질문 남겨주세요~

반응형