시뮬레이션으로 검증한 2048 전략

2048 공략 글은 대부분 거의 같은 몇 가지 요령을 늘어놓고, 그 근거를 보여 주는 글은 드뭅니다. 이건 해결할 수 있는 문제입니다. 요령은 알고리즘으로 적을 수 있을 만큼 구체적이고, 알고리즘이라면 수천 판을 두게 해서 결과를 보고받을 수 있습니다.

이 페이지에서 바로 그렇게 했습니다. 자주 듣는 조언을 정책으로 바꾸고, 이 사이트의 판과 같은 규칙으로 21,000판의 완전한 게임을 돌려 결과를 비교했습니다. 유명한 요령 하나는 소문만큼은 아니어도 통했고, 여기저기서 반복되는 다른 요령은 확실하게 지는 방법으로 드러났습니다.

결과

정책판 수1024 도달2048 도달4096 도달점수 중앙값
익스펙티맥스 탐색50099.4%91.4%41.0%37,004
같은 탐색, 구석 항목 제외50099.8%89.4%45.6%37,954
고정 우선순위: 위 → 왼쪽 → 오른쪽 → 아래10,0000.0%0.0%0.0%2,436
무작위 유효 수10,0000.0%0.0%0.0%1,056

모든 정책은 완전히 같은 규칙으로 겨룹니다. 같은 4×4 판, 새 타일이 2 또는 4로 나오는 같은 90대 10 비율, 같은 승리 조건입니다. 행과 행을 가르는 것은 판단의 질뿐이고, 이것이 알아 둘 점입니다. 표의 위와 아래의 차이는 모두 실력이지, 운이 아닙니다.

요령 1: 가장 큰 타일을 구석에 둔다

판정: 맞다. 다만 소문만큼의 가치는 없고, 이 솔버 안에서는 승률로 약 2퍼센트포인트.

이건 직접 검증할 수 있습니다. 솔버는 검토하는 모든 판을 가장 큰 타일이 구석에 있는지로도 채점합니다. 그 항목 하나만 빼고 나머지는 아무것도 바꾸지 않은 채(탐색 깊이도, 시작 판도, 난수 시드도 같게) 돌리면, 승률은 91.4%에서 89.4%로 떨어집니다. 점수 중앙값은 더 출렁이기 쉬운 지표라, 이번 실행에서는 37,004점에서 37,954점으로 움직였습니다. 막판의 큰 합체 하나가 그 판이 2048에 도달했는지와 상관없이 최종 점수를 크게 흔들기 때문입니다. 여기서 믿을 숫자는 각각 500판으로 측정한 승률입니다. 정직하게 읽으면 차이의 방향은 진짜지만 작고, 아래 「측정 방법」에서 설명하는 약 1퍼센트포인트의 오차보다 조금 큰 정도입니다.

차이가 작은 이유 하나는, 솔버가 시키지 않아도 구석을 쓴다는 것입니다. 다른 항목인 빈칸과 정렬 상태가 그것만으로 가장 큰 타일을 구석으로 끌어당깁니다. 사람에게는 그런 안전망이 없습니다. 그리고 구석을 권하는 이유는 신비로운 게 아니라 구조적인 것입니다. 구석의 타일은 뒤에 벽이 두 개 있어서, 네 방향 중 그것을 움직일 수 있는 것은 두 방향뿐입니다. 변에 붙은 타일은 벽이 하나입니다. 한가운데 타일에는 벽이 없어서 어떤 수를 두든 어딘가로 밀려납니다. 무언가를 계속 놓아 둘 수 있는 칸은 판에서 구석뿐입니다.

실제 플레이에서 이에 대응하는 측정값으로, 솔버는 게임 전체에 걸쳐 수의 91.2%에서 가장 큰 타일을 구석에 두고 있었습니다. 무작위로 움직이는 정책은 11.9%였고, 이는 대략 판이 우연히 만들어 내는 비율입니다.

어느 구석인지는 상관없다. 다만 도중에 바꾸면 비싸게 치른다

판은 대칭이라 유리한 구석은 없습니다. 게임을 잃게 만드는 것은 구석을 바꾸는 일입니다. 모든 구석에는 쓰지 말아야 할 방향이 하나씩 따라옵니다. 그 구조를 다른 방향으로 다시 쌓으려면 여러 수가 걸리고, 그동안은 아무것도 보호받지 못합니다. 처음에 하나를 골라 끝까지 바꾸지 않는 것으로 여기세요.

요령 2: 두 화살표 키를 번갈아 누르기만 한다

판정: 틀리다. 중반 이후에는 오히려 해가 된다.

2048에서 가장 널리 반복되는 요령은 대략 이렇습니다. 위와 왼쪽을 계속 누르다가, 둘 다 움직이지 않으면 오른쪽을 누르고 곧바로 세로 움직임으로 돌아간다. 이것이 완전한 전략처럼 이야기됩니다. 알고리즘으로 적으면(위를 시도하고, 안 되면 왼쪽, 안 되면 오른쪽, 안 되면 아래) 완전히 엄밀해지므로 10,000번 돌려 봤습니다.

2048에 도달한 판은 0.0%였습니다. 1024에 도달한 판은 0.0%, 512에 도달한 판은 4.8%입니다. 게임은 중앙값 215수에서 끝났고, 점수는 2,436점이었습니다.

여기서는 정확히 말해 둘 가치가 있습니다. 이 요령은 쓸모없지 않고, 초반에는 아주 유용하기 때문입니다. 1024에 도달하는 판이 0.0%에 그치는 무작위 수와 비교하면, 이 패턴이 분명히 제 몫을 하고 있다는 것이 명확합니다. 숫자의 기울기를 만들고, 큰 타일을 눌러 두고, 초보자를 별생각 없이 256이나 512까지 데려다 줍니다.

할 수 없는 것은 끝까지 이기는 일입니다. 실패의 원인은 분명하고, 바로 도망치는 한 수에 있습니다. 위와 왼쪽이 모두 움직이지 않을 때 이 패턴은 오른쪽을 누르라고 합니다. 그리고 오른쪽이야말로 게임 내내 지켜 온 구석에서 가장 큰 타일을 떼어 내는 유일한 방향입니다. 판이 막힐 때마다 그 수를 두다 보면, 언젠가는 빈 구석에 새 타일이 나타나는 순간에 그 수를 두게 됩니다. 그러면 구조는 다시 세울 수 없고, 판이 아직 멀쩡해 보여도 그 게임은 끝난 것입니다.

실용적인 처방은 패턴을 버리는 게 아니라, 도망치는 한 수를 자동으로 두지 않는 것입니다. 두 방향을 다 썼을 때야말로 게임이 진짜 질문을 던지는 순간입니다. 그리고 그때가 바로 힌트를 눌러 탐색이 자신의 직감과 맞는지 확인해야 할 순간이기도 합니다.

요령 3: 아무도 말하지 않지만, 데이터가 강하게 가리키는 것

빈칸이 구석보다 중요합니다.

솔버는 모든 판을 네 가지 항목으로 평가하고, 그 가중치는 같지 않습니다. 빈칸의 가중치는 2.7, 구석 지키기는 1, 정렬 상태는 1입니다. 이 가중치들은 게임에서 이기도록 조정된 것이고, 판에서 가장 값진 것은 움직일 여유이며 어느 공략 글이든 맨 먼저 꼽는 구석 규칙보다 위에 있다는 것을 분명히 보여 줍니다.

이것이 많은 중급자에게 필요한 교정입니다. 빈칸은 선택의 여지라는 가치를 지닙니다. 비어 있는 칸은 아직 억지로 두지 않아도 된 수입니다. 빈칸이 한두 개가 되면 판이 대신 결정을 내려 버립니다. 정렬을 지킬 수 있는 유효한 수가 하나도 없다면, 타일이 아무리 아름답게 늘어서 있어도 의미가 없습니다.

실제로는 합체가 자동으로 좋은 수가 되지는 않는다는 뜻입니다. 판 한가운데의 합체는 칸 하나를 비워 주니 매력적으로 보이지만, 그것 때문에 구조의 정렬이 무너진다면 일시적인 문제를 영구적인 문제와 맞바꾼 셈입니다. 그리고 가장 신중해야 할 때는 판이 어수선해 보일 때가 아니라, 아무리 정돈되어 있어도 거의 다 차 보일 때입니다.

요령 4: 작은 타일을 묻히게 두지 않는다

판정: 맞다. 그리고 읽어 낼 가치가 있는 신호입니다.

두 16 사이에 낀 2는 아무것과도 합쳐질 수 없습니다. 그것을 치우려면 먼저 그 옆에 2를 하나 더 만들고, 다음에 4를 만들고… 하는 식으로 여러 수를 들여야 하고, 그동안 다른 모든 것을 버텨 내야 합니다. 내버려 두면 계속 칸 하나를 차지하는데, 이는 위의 논의에 따르면 일어날 수 있는 가장 비싼 일입니다.

이것은 독립된 정책으로 측정하지 않았고, 측정했다고 하면 정직하지 않습니다. 수를 고르는 규칙이 아니라 판의 상태를 나타내는 것이기 때문입니다. 다만 이것은 실제로 측정한 효과에서 곧바로 이어집니다. 갇힌 타일은 영영 잃은 칸이고, 잃은 칸이야말로 평가에서 가장 무거운 항목이 세는 것입니다. 아직 닿을 수 있는 이웃이 있을 때 그 고립된 타일을 정리하세요. 기다리는 한 수마다 대가는 커집니다.

잘 둔다고 얻을 수 없는 것

탐색조차 때로는 집니다. 8.6%의 판에서 2048에 도달하지 못했고, 8,192에는 한 번도 도달하지 못했습니다. 판을 무너뜨리는 단 하나의 칸에 4가 나타날 가능성을 없애 주는 전략은 없습니다. 잘 두면 대개 지는 상태에서 가끔 지는 상태로 바뀝니다. 그게 이 게임의 전부입니다. 반드시 이기는 방법을 약속하는 사람은 그것을 측정해 보지 않은 것입니다.

측정 방법

숫자는 이 사이트의 저장소에 있는 scripts/simulate.js를 2026년 8월 9일에 실행한 결과입니다. 독자가 판단할 수 있도록 방법을 분명히 적어 둡니다.

  • 각 정책은 브라우저에서 돌아가는 것과 같은 이동 코드로 완전한 게임을 둡니다. 코드를 다시 만들지 않고 /js/ai.js에서 그대로 불러오므로, 시뮬레이션이 실제 게임과 어긋날 일이 없습니다.
  • 규칙은 게임 엔진에서 그대로 옮겼습니다. 시작 타일은 두 개, 새 타일은 확률 0.9로 2이고 그 밖에는 4, 점수는 합쳐진 타일의 값을 더해 가며, 어느 방향으로 움직여도 판이 변하지 않을 때에만 게임이 끝납니다.
  • 난수 생성기에는 시드를 주고(실행 시드는 1), 각 게임의 시드는 그 번호에서 이끌어 냅니다. 그래서 실행 전체를 그대로 재현할 수 있고, 구석 항목을 뺀 실험도 원래 솔버와 같은 시작 판을 마주합니다.
  • 표본 크기는 일부러 다르게 했습니다. 탐색의 각 설정은 한 판에 약 20초가 걸려 500판, 더 큰 표본을 거의 공짜로 얻을 수 있는 가벼운 정책은 10,000판입니다.

고려해야 할 한계가 두 가지 있습니다. 첫째, 이 정책들은 조언을 형식화한 것이지 조언 그 자체가 아닙니다. 「두 방향을 지킨다」를 따르는 사람은 고정 우선순위로는 담을 수 없는 판단도 합니다. 그러니 0.0%라는 숫자는 이 생각의 하한이지, 이것을 쓰는 모든 사람에 대한 판정이 아닙니다. 둘째, 500판으로는 탐색의 승률에 약 1퍼센트포인트의 불확실성이 남으므로, 그런 작은 차이는 잡음으로 다루세요. 이 페이지에서 말한 차이는 그보다 훨씬 큽니다.

여기서 가져가길 바라는 것은 하나입니다. 요령이 모두 똑같이 좋은 것은 아니고, 그 차이는 취향의 문제가 아니라 측정할 수 있는 것입니다. 구석을 지키는 규율과 빈칸을 지키는 습관은 몸에 익힐 가치가 있습니다. 정해진 키 순서에서는 일찍 졸업하세요.

이제 직접 해볼까요?

2048 플레이하기
데일리 챌린지에 도전해 보세요