[필수 문제] 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 |