Introduction

Hello, and welcome, code explorer! Today's journey takes us through the intricate paths within a 2-dimensional array, often likened to a game board. Our mission is to identify ideal spots for game piece placement. Sounds like an adventure, doesn't it? Let's embark!

Task Statement

Visualize a chessboard in the form of a 2D array, where each cell could be marked E for empty or P for a piece. Our quest involves summoning a Java function named findPositions(). Upon examining this 2D array, this function identifies all the spots where a new piece could be placed so that it can move to another empty cell in one move. The catch is that a piece can move only to an immediately neighboring cell directly above, below, to the left, or right, but not diagonally.

Consider this 4x4 board, for instance:

P E E P
E P E P
P E P P
P E P E

The function should output the following pairs representing positions: (0, 1), (0, 2), (1, 2), (2, 1), (3, 1). This output represents the positions where a new piece can fit perfectly and then be able to move in the next turn.

Solution Building: Step 1

Stepping right into action, we start with an empty positions list to help us log the sought positions. Understanding the dimensions of our "board" paves the way for defining boundaries in our exploration mission. Now, how does one determine the size of a Java 2D array? The answer lies in the .length property.

Using a list is crucial here because we don't know beforehand how many positions will be found. A list in Java is dynamic and can resize itself to accommodate any number of elements, making it a perfect choice for storing an unknown number of positions.

import java.util.ArrayList;
import java.util.List;

class Solution {
    public static List<int[]> findPositions(char[][] board) {
        List<int[]> positions = new ArrayList<>();

        int rows = board.length;
        int cols = board[0].length; 
        // Further exploration follows
Solution Building: Step 2

With our boundary map, we begin our expedition across the board. We use two nested for loops to do this, traversing the entire board one cell at a time.

import java.util.ArrayList;
import java.util.List;

class Solution {
    public static List<int[]> findPositions(char[][] board) {
        List<int[]> positions = new ArrayList<>();

        int rows = board.length;
        int cols = board[0].length;

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                // ensuing exploration
Sign up
Join the 1M+ learners on CodeSignal
Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal