1️⃣ 문제


2️⃣ 문제 해결 전략
- 각 사람들의 카드 최소값들을 구함
- 교환 완료하거나, 교환 불가한 사람들은 set에 넣음
- 교환 불가 조건 == 교환해도 최소값이 변하지 않는 경우
3️⃣ 코드 및 설명
내 코드 & 모범 코드
- 교환해도 최소값이 변하지 않는 경우를 테스트케이스 예시를 보고 설정함
- min이 2개면 안됨
- min과 주려는값-1이 같으면 안됨
- min인덱스가 같으면 안됨
⇒ 이게 맞는가 했지만,,, 교환후 배열을 반환하는 것이 아닌 최소값들만 알아내면 되는 문제라 통과한 듯
function solution(cards) { var swap = new Set([]); function findMinIdx(arr, idx) { var want = Math.min(...arr); const count = arr.filter((a) => a === want).length; if (count > 1) { swap.add(idx); return -1; } return arr.indexOf(want); } const mins = cards.map((card) => Math.min(...card)); const minIdxs = cards.map((card, idx) => findMinIdx(card, idx)); for (let i = 0; i < cards.length; i++) { if (swap.has(i)) { continue; } swap.add(i); for (let j = 0; j < cards.length; j++) { if ( i !== j && !swap.has(j) && minIdxs[i] !== minIdxs[j] && cards[i][minIdxs[i]] !== cards[i][minIdxs[j]] - 1 && cards[j][minIdxs[j]] !== cards[j][minIdxs[i]] - 1 ) { mins[i] += 1; mins[j] += 1; swap.add(j); break; } } } const answer = mins.reduce((acc, cur) => acc + cur); return answer; }
4️⃣ 시간복잡도
O(N²)