1 1 1 0 1
0 1 0 0 0
0 0 0 0 0
1 0 1 0 0
0 0 0 0 1
[(0,0) (2,0)] 3
아래 코드를 실행하면 결과가 위처럼 나오거든요??
근데 이게 배열크기가 정해져있고 랜덤으로 0과 1을 생성해서
그 크기와 왼쪽위 x,y좌표랑 오른쪽아래x,y로 위치를 표시 하는건데요...
제가 입력을 파일로 받고 입력파일의 첫줄에 최대차이(d) 너비 n,m 이 주어지고 다음 줄부터 배열을 받아서 배열 최소값을 찾아서 최대 차이만큼의 숫자를 찾아서 0과 1로 나타내주는 코드가 있거든요.
이 초록색 코드가 입력인데 밑에있는 코드의 getarray 부분에 이 초록코드가 입력으로 들어가게 하고싶은데 코드좀 이어주실 자바 고수분ㅠㅠ 도와주세요ㅠㅠ
public class array {
static ArrayList list = new ArrayList();
public static void main(String[] args) throws Exception {
int d = 0;
int n;
int m;
int arr[][] = null;
int min = 10001;
// 파일 읽기
File f = new File("c:/Users/ㅇㅇ/desktop/ins.txt");
FileReader fr = null;
try {
fr = new FileReader(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedReader br = new BufferedReader(fr);
try {
String line;
line = br.readLine();
StringTokenizer st = new StringTokenizer(line, " ");
d = Integer.valueOf(st.nextToken());
n = Integer.valueOf(st.nextToken());
m = Integer.valueOf(st.nextToken());
arr = new int[m][n];
for (int i = 0; i < m && (line = br.readLine()) != null; i++) {
arr[i] = new int[n];
st = new StringTokenizer(line, " ");
for (int j = 0; j < n && st.hasMoreTokens(); j++) {
arr[i][j] = Integer.valueOf(st.nextToken());
min = min > arr[i][j] ? arr[i][j] : min;
}
}
}
catch (IOException e) {
e.printStackTrace();
} finally {
br.close();
fr.close();
}
// 배열 출력
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
int 찾기 = 0;
for (int k = min; k <= min + d; k++) {
if (arr[i][j] == k)
찾기= 1;
}
System.out.print(찾기+" ");
}
System.out.println();
}
}
}
package pro1;
import java.util.*;
import java.io.*;
import pro1.array;
public class Rectangle {
static ArrayList list = new ArrayList();
static Random r = new Random();
public static void main(String[] args) throws Exception {
find(getArray());
}
static boolean[][] getArray() {
boolean[][] arr = new boolean[5][5];
for (int i=0; i<arr.length; i++) {
for (int j=0; j<arr[i].length; j++) {
arr[i][j] = r.nextBoolean();
System.out.print(arr[i][j] ? "1 " : "0 ");
}
System.out.println();
}
return arr;
}
static void find(boolean[][] b) {
list.clear();
// 각 셀을 하나씩 찾아간다.
for (int i=0; i<b.length; i++) {
for (int j=0; j<b[i].length; j++) {
if (b[i][j]) { // true(1)이면 거기에서 부터 찾는다.
visit(i, j, b);
}
}
}
// 가장 큰 사각형이 여러개 있을 수 있으므로
// 리스트에 모두 담아 놓고 출력한다. i<list.size
for (int i=0; i<1; i++)
System.out.println(list.get(i));
System.out.println("\n");
}
static void visit(int r, int c, boolean[][] b) {
int colStart = c, colEnd = c;
int rowStart = r, rowEnd = r;
// 가로로 1로 끝나는 부분을 찾는다.
for (int i=c+1; i<b[r].length; i++) {
if (b[r][i])
colEnd = i;
else
break;
}
// 세로로 1로 끝나는 부분을 찾는다.
for (int i=r+1; i<b.length; i++) {
if (b[i][c])
rowEnd = i;
else
break;
}
// 가로측 방향으로 직사각형을 찾는다.
int subColEnd = colEnd;
for (int i=r; i<=rowEnd; i++) {
for (int j=c; j<=colEnd; j++) {
if (!b[i][j] && j-1<subColEnd) {
subColEnd = j-1;
break;
}
}
add(new Square(colStart, rowStart, subColEnd, i));
}
// 세로측 방향으로 직사각형을 찾는다.
int subRowEnd = rowEnd;
for (int i=c; i<=colEnd; i++) {
for (int j=r; j<=rowEnd; j++) {
if (!b[j][i] && j-1<subRowEnd) {
subRowEnd = j-1;
break;
}
}
add(new Square(colStart, rowStart, i, subRowEnd));
}
}
// 리스트의 원소와 비교하여 지우거나 넣거나. 무시하거나..
static void add(Square s) {
if (list.size() == 0)
list.add(s);
else {
Square temp = (Square)list.get(0);
if (s.getArea() > temp.getArea() ) {
list.clear();
list.add(s);
} else if (s.getArea() == temp.getArea() ) {
for (int i=0; i<list.size(); i++)
if (s.equals(list.get(i)))
return;
list.add(s);
}
}
}
}
class Square {
int ux;
int uy;
int dx;
int dy;
public Square (int a, int b, int c, int d) {
ux = a;
uy = b;
dx = c;
dy = d;
}
public int getArea() {
return ((dy - uy) +1) * ((dx - ux)+1); // 세로 * 가로
}
public String toString() {
return "[(" + (ux) + "," + (uy) + ") (" + (dx) + "," + (dy) + ")] " + getArea();
}
public boolean equals(Object o) {
Square s = (Square)o;
if ( ux==s.ux
&& uy==s.uy
&& dx==s.dx
&& dy==s.dy)
return true;
return false;
}
}
댓글 1