트랙
/
Rust
Rust
/
연습 문제
/
지뢰찾기
지뢰찾기

지뢰찾기

보통

소개

지뢰찾기는 숫자 힌트를 이용해 지뢰를 찾아야 하는 인기 있는 게임이에요. 숫자 힌트는 어떤 칸을 기준으로 가로, 세로, 대각선으로 바로 인접한 칸에 지뢰가 몇 개 있는지 알려줘요.

지침

완성된 지뢰찾기 보드에서 빈 칸에 지뢰 개수를 채워 넣는 것이 과제예요. 보드는 각 칸이 비어 있거나(' ') 지뢰('*')인 직사각형이에요.

빈 칸마다 가로, 세로, 대각선으로 인접한 지뢰의 개수를 세요. 인접한 지뢰가 없으면 그 칸은 비워 둬요. 그렇지 않으면 인접한 지뢰 개수로 바꿔요.

예를 들어, 다음과 같은 5 x 4 보드를 받을 수 있어요 (여기서 빈 칸은 화면에 표시하기 위해 '·' 문자로 나타냈어요):

·*·*·
··*··
··*··
·····

코드가 변환해야 하는 결과는 다음과 같아요:

1*3*1
13*31
·2*2·
·111·

성능 힌트

모든 입력과 출력이 ASCII예요. Rust의 String과 &str은 utf8이라서, "Hello".chars()가 간단할 거라고 생각하기 쉽지만, 실제로는 각 문자가 u8 1개, 2개, 3개, 4개 중 몇 개 길이인지 확인해야 해요. 어떤 &str이 ASCII라는 걸 안다면 .as_bytes()를 호출해서 바탕이 되는 데이터를 &[u8](바이트 슬라이스)로 참조할 수 있어요. ASCII 바이트 슬라이스를 순회하는 게 훨씬 빠른데, 코드포인트가 전혀 개입하지 않기 때문이에요. 모든 ASCII 바이트는 u8 하나 길이니까요.

입력을 복제하지 않고 이 과제를 완료할 수 있을까요?

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Rust Exercism

지뢰찾기 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Rust 트랙을 연습 문제 99개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.

지뢰찾기 깊이 살펴보기!

중첩된 `for`문, 경계 검사를 단순하게 만드는 min/max의 영리한 활용, 함수형 파이프라인, 그리고 2차원 행렬 사용법을 살펴봐요.