[필수 문제] offset

2021. 2. 11. 23:42코딩 테스트/필수 문제

1. 문제

5x5 2차원 배열이 주어질 때 어떤 원소가 상하좌우에 있는 원소보다 작을 때 해당 위치에 * 을 표시하는 프로그램을 작성하시오. 경계선에 있는 수는 상하좌우 중 존재하는 원소만을 비교한다.


입력

5x5 행렬의 정보가 25 개의 수로 주어진다. 각 수는 0 에서 9 사이 수이다.

출력

*를 포함한 행렬을 출력예의 형식으로 출력한다.

예제 입력

3 4 1 4 9
2 9 4 5 8
9 0 8 2 1
7 0 2 8 4
2 7 2 1 4

예제 출력

3 4 * 4 9 
* 9 4 5 8 
9 0 8 2 * 
7 0 2 8 4 
* 7 2 * 4 

 

 

 

2. 풀이

이 문제의 풀이는 비교적 간단하다. 주어진 2차원 배열을 큰 숫자로 둘러쌓아 해결하면 된다.

99 99 99 99 99 99 99
99 3 4 1 4 9 99
99 2 9 4 5 8 99
99 9 0 8 2 1 99
99 7 0 2 8 4 99
99 2 7 2 1 4 99
99 99 99 99 99 99 99
import java.io.*;
import java.util.StringTokenizer;

public class Main {

    private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {

        int[][] arr = new int[7][7];
        StringTokenizer st;
        for(int i = 1; i <= 5; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j = 1; j <= 5; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        for(int i = 0; i < 7; i++) {
            arr[0][i] = 99;
            arr[6][i] = 99;
            arr[i][0] = 99;
            arr[i][6] = 99;
        }

        for(int i = 1; i <= 5; i++) {
            for(int j = 1; j <= 5; j++) {
                if(arr[i][j] < arr[i-1][j] &&
                arr[i][j] < arr[i+1][j] &&
                arr[i][j] < arr[i][j-1] &&
                arr[i][j] < arr[i][j+1]) bw.write("* ");
                else bw.write(arr[i][j] + " ");
            }
            bw.newLine();
        }

        br.close();
        bw.flush();
        bw.close();
    }

}
728x90

'코딩 테스트 > 필수 문제' 카테고리의 다른 글

[필수 문제] GCD LCM  (0) 2021.02.12
[필수 문제] 상자 꾸미기  (0) 2021.02.12
[필수 문제] 숫자 피라미드  (0) 2021.02.11
[필수 문제] 주사위 게임  (0) 2021.02.11