처음에 가진 동전수를 나타내는 정수 coin과 카드를 뽑는 순서대로 카드에 적힌 수를 담은 1차원 정수 배열 cards가 매개변수로 주어질 때, 게임에서 도달 가능한 최대 라운드의 수를 return 하도록 solution 함수를 완성해 주세요.
제한사항
0 ≤ coin ≤ n
6 ≤ cards의 길이 = n < 1,000
cards[i]는 i+1번째로 뽑는 카드에 적힌 수를 나타냅니다.
1 ≤ cards[i] ≤ n
cards의 원소는 중복되지 않습니다.
n은 6의 배수입니다.
구현문제였는데 투포인터 문제인줄알고 바로 정렬해서 풀었다가 낭패를 보았다. 문제를 제대로 읽고 해결하자.
코드
import java.util.*;
class Solution {
public int solution(int coin, int[] cards) {
HashSet<Integer> set =new HashSet<>();
HashSet<Integer> setadd =new HashSet<>();
int answer = 0;
int target = cards.length+1;
int idx= cards.length/3;
for(int i=0;i<idx;i++){
set.add(cards[i]);
}
while(true){
boolean flag= false;
answer++;//무조건 1라운드는 도착
if(idx>=cards.length) break;
setadd.add(cards[idx]);
setadd.add(cards[idx+1]);
idx+=2;
for(int i : set){
if(set.contains(target-i)){
set.remove(i);
set.remove(target-i);
flag= true;
break;
}
}
if(flag) continue;
if(coin>0){
for(int i : set){
if(setadd.contains(target-i)){
set.remove(i);
setadd.remove(target-i);
flag= true;
coin--;
break;
}
}
}
if(flag) continue;
if(coin>1){
for(int i : setadd){
if(setadd.contains(target-i)){
setadd.remove(i);
setadd.remove(target-i);
flag= true;
coin-=2;
break;
}
}
}
if(!flag) break;
}
return answer;
}
}