반응형
안녕하세요! Plitche(플리체)입니다.
이번 포스팅의 주제는 Q1098 : [기초-2차원배열] 설탕과자 뽑기 (자바, JAVA)입니다.
intro
Question
문제 설명
입력
첫 줄에 격자판의 세로(h), 가로(w) 가 공백을 두고 입력되고,
두 번째 줄에 놓을 수 있는 막대의 개수(n)
세 번째 줄부터 각 막대의 길이(l), 방향(d), 좌표(x, y)가 입력된다.
입력값의 정의역은 다음과 같다.
1 <= w, h <= 100
1 <= n <= 10
d = 0 or 1
1 <= x <= 100-h
1 <= y <= 100-w
출력
모든 막대를 놓은 격자판의 상태를 출력한다.
막대에 의해 가려진 경우 1, 아닌 경우 0으로 출력한다.
단, 각 숫자는 공백으로 구분하여 출력한다.
예시
- 입력 :
5 5
3
2 0 1 1
3 1 2 3
4 1 2 5 - 출력 :
1 1 0 0 0
0 0 1 0 1
0 0 1 0 1
0 0 1 0 1
0 0 0 0 1
Solution (풀이)
- 풀이 1 : 메모리 14460, 시간 111
public class Answer1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int w = sc.nextInt(); // 격자판 가로 길이
int h = sc.nextInt(); // 격자판 세로 길이
int[][] board = new int[w][h]; // 입력받은 격자판 크기만큼 배열 크기 지정
int n = sc.nextInt(); // 막대의 개수
// 막대의 속성 막대의 개수만큼 배열 길이 지정
int[] i = new int[n];
int[] d = new int[n];
int[] x = new int[n];
int[] y = new int[n];
for (int j=0; j<n; j++) { // 막대의 개수만큼 for문 반복
i[j] = sc.nextInt(); // 막대의 길이
d[j] = sc.nextInt(); // 막대의 방향
x[j] = sc.nextInt()-1; // 가로 좌표
y[j] = sc.nextInt()-1; // 세로 좌표
}
for (int j=0; j<n; j++) { // 막대의 개수만큼 for문 반복
for (int k=0; k<i[j]; k++) { //막대의 길이만큼 for문 반복
if (d[j]==0) { // 막대를 놓는 방향이 가로일 때
board[x[j]][y[j]+k] = 1;
} else { // 막대를 놓는 방향이 세로일 때
board[x[j]+k][y[j]] = 1;
}
}
}
for (int j=0; j<w; j++) {
for (int k=0; k<h; k++) {
System.out.print(board[j][k] + " "); // 해당 격자판 값 출력
}
System.out.println(); // 줄 바꿈
}
sc.close();
}
}
- 풀이 2 : 메모리 11268, 시간 61
public class Answer2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
// 입력받은 격자판 크기만큼 배열 크기 지정
int[][] board = new int[Integer.parseInt(st.nextToken())][Integer.parseInt(st.nextToken())];
int n = Integer.parseInt(br.readLine()); // 막대의 개수
for (int j=0; j<n; j++) {
StringTokenizer st2 = new StringTokenizer(br.readLine(), " ");
int i = Integer.parseInt(st2.nextToken()); // 막대의 길이
int d = Integer.parseInt(st2.nextToken()); // 막대의 방향
int x = Integer.parseInt(st2.nextToken())-1; // 가로 좌표
int y = Integer.parseInt(st2.nextToken())-1; // 세로 좌표
if (d==0) { // 막대를 놓는 방향이 가로일 때
for (int k=0; k<i; k++) { //막대의 길이만큼 for문 반복
board[x][y+k] = 1; // 해당 좌표 1로 저장
}
} else { // 막대를 놓는 방향이 세로 일 때
for (int k=0; k<i; k++) { //막대의 길이만큼 for문 반복
board[x+k][y] = 1; // 해당 좌표 1로 저장
}
}
}
StringBuilder sb = new StringBuilder();
for (int[] i : board) { // 2중 foreach문 활용
for (int j : i) {
sb.append(j).append(" ");
}
sb.append("\n");
}
System.out.print(sb);
br.close();
}
}
Ranking(순위)
반응형
'Algorithm > CodeUp' 카테고리의 다른 글
[CodeUp_Java] Q1103 : 폴더명 출력 (0) | 2022.04.29 |
---|---|
[CodeUp_Java] Q1099 : [기초-2차원배열] 성실한 개미 (0) | 2022.04.27 |
[CodeUp_Java] Q1097 : [기초-2차원배열] 바둑알 십자 뒤집기 (0) | 2022.04.27 |
[CodeUp_Java] Q1096 : [기초-2차원배열] 바둑판에 흰 돌 놓기 (0) | 2022.04.27 |
[CodeUp_Java] Q1095 : [기초-종합] 이상한 출석 번호 부르기3 (0) | 2022.04.27 |