문제 해석
문제 접근(내방식)
코드1
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer token;
int[][] axis = new int[n][2]; //x좌표 y좌표 넣는 배열
for(int i = 0; i < n; i++){
token = new StringTokenizer(br.readLine());
for(int j = 0; j < 2; j++){ //x, y좌표니까
axis[i][j] = Integer.parseInt(token.nextToken());
}
}
br.close();
int x_min = axis[0][0]; //2차원 배열 마지막 인덱스가 0인 것은 x좌표
int x_max = axis[0][0];
int y_min = axis[0][1]; //2차원 배열 마지막 인덱스가 1인 것은 y좌표
int y_max = axis[0][1];
//배열의 행의 크기 만큼 반복을 돌려 해당 x, y 좌표의 최소, 최댓값을 구한다.
for(int i = 0; i < n; i++) {
if (x_max < axis[i][0]) {
x_max = axis[i][0];
}
if (x_min > axis[i][0]) {
x_min = axis[i][0];
}
if (y_max < axis[i][1]) {
y_max = axis[i][1];
}
if (y_min > axis[i][1]) {
y_min = axis[i][1];
}
}
System.out.println((x_max-x_min)*(y_max-y_min)); //면적구하기
}
}
결과1
참고해서 작성한 코드2
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int x_axis[] = new int[n]; //x좌표 배열 따로
int y_axis[] = new int[n]; //y좌표 배열 따로
for(int i = 0; i < n; i++){
//어차피 token for문 안에서만 쓰니까
StringTokenizer token = new StringTokenizer(br.readLine());
x_axis[i] = Integer.parseInt(token.nextToken());
y_axis[i] = Integer.parseInt(token.nextToken());
}
br.close();
//작은 수부터 큰 수로 정렬하는 (즉, index가 작으면 작은수, index가 크면 큰 수)
Arrays.sort(x_axis);
Arrays.sort(y_axis);
System.out.println((x_axis[n-1]-x_axis[0])*(y_axis[n-1]-y_axis[0]));
}
}
결과2
private static int getDepth(int parallelism, int size) {
int depth = 0;
while ((parallelism >>= 3) > 0 && (size >>= 2) > 0) {
depth -= 2;
}
return depth;
}
코드3(틀린코드)
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int x_axis[] = new int[n]; //x좌표 배열 따로
int y_axis[] = new int[n]; //y좌표 배열 따로
int x_min = Integer.MAX_VALUE; //최솟값을 구하기 위해 가장 큰 int형의 값을 넣고 작으면 갱신하는 방식으로
int x_max = 0; //0으로 설정해두고, 가장 큰 수가 int
int y_min = Integer.MAX_VALUE;
int y_max = 0;
for(int i = 0; i < n; i++){
//어차피 token for문 안에서만 쓰니까
StringTokenizer token = new StringTokenizer(br.readLine());
x_axis[i] = Integer.parseInt(token.nextToken());
y_axis[i] = Integer.parseInt(token.nextToken());
//for문을 최소화로 하기 위해 if문으로 해서 각 x, y의 최솟값을 구했다.
if(y_axis[i] > y_max){
y_max = y_axis[i];
}
if(y_axis[i] < y_min){
y_min = y_axis[i];
}
if(x_axis[i] > x_max){
x_max = x_axis[i];
}
if(x_axis[i] < x_min){
x_min = x_axis[i];
}
}
br.close();
System.out.println((x_max-x_min)*(y_max-y_min));
}
}
결과3
고친 코드3
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int x_axis[] = new int[n]; //x좌표 배열 따로
int y_axis[] = new int[n]; //y좌표 배열 따로
int x_min = Integer.MAX_VALUE; //Integer의 가장 큰 값
int x_max = Integer.MIN_VALUE; //Integer의 가장 작은 값
int y_min = Integer.MAX_VALUE; //Integer의 가장 큰 값
int y_max = Integer.MIN_VALUE; //Integer의 가장 작은 값
for(int i = 0; i < n; i++){
//어차피 token for문 안에서만 쓰니까
StringTokenizer token = new StringTokenizer(br.readLine());
x_axis[i] = Integer.parseInt(token.nextToken());
y_axis[i] = Integer.parseInt(token.nextToken());
//for문을 최소화로 하기 위해 if문으로 해서 각 x, y의 최솟값을 구했다.
if(y_axis[i] > y_max){
y_max = y_axis[i];
}
if(y_axis[i] < y_min){
y_min = y_axis[i];
}
if(x_axis[i] > x_max){
x_max = x_axis[i];
}
if(x_axis[i] < x_min){
x_min = x_axis[i];
}
}
br.close();
System.out.println((x_max-x_min)*(y_max-y_min));
}
}
결과3
마지막 코드(정답)
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int x_min = Integer.MAX_VALUE;
int x_max = Integer.MIN_VALUE;
int y_min = Integer.MAX_VALUE;
int y_max = Integer.MIN_VALUE;
for(int i = 0; i < n; i++){
//어차피 token for문 안에서만 쓰니까
StringTokenizer token = new StringTokenizer(br.readLine());
int x = Integer.parseInt(token.nextToken());
int y = Integer.parseInt(token.nextToken());
//배열에 저장하는 것이 메모리 낭비일 수도 있겠다는 생각!
if(y > y_max){
y_max = y;
}
if(y < y_min){
y_min = y;
}
if(x > x_max){
x_max = x;
}
if(x < x_min){
x_min = x;
}
}
br.close();
System.out.println((x_max-x_min)*(y_max-y_min));
}
}
//배열에 저장하는 것이 메모리 낭비일 수도 있겠다는 생각!
x_max = Math.max(x_max, x);
x_min = Math.min(x_min, x);
y_max = Math.max(y_max, y);
y_min = Math.min(y_min, y);
결과
느낀점
1 43845033 2 uhuru0614 12428 120 Java 8 807 10달 전