프로그래밍 배운지 한달째 되는 학생입니다.
(50,50), (100,100) 을 잇는 선분을 대각선으로 가지는 직사각형을 네개로 쪼개서 입력한 사각형과 각 구역에서 얼만큼 겹치는 지 계산하는 프로그램입니다.
import java.util.Arrays;
import java.util.Scanner;
public class Size {
public static void main(String[] args) {
while(true) {
int a, b, c, d;//a,b는 세로 축, c,d 는 가로 축이다.
int i, j, m, n;//반복문의 인자들
int result;// 사각형의 넓이 결과값
System.out.println(\"사각형은 다음과 같이 나눠집니다.\");
System.out.println(\"( 2-1 구역 2-2 구역 )\");
System.out.println(\"( 1-1 구역 1-2 구역 )\");
Scanner scanner = new Scanner(System.in);
System.out.println(\"이차원 평면 위의 정수 좌표를 가지는 두 점을 입력해주세요.\");
System.out.print(\"첫번 째 점의 x,y 좌표 : \");
a = scanner.nextInt();
c = scanner.nextInt();
System.out.print(\"두번 째 점의 x,y 좌표 : \");
b = scanner.nextInt(); //a,b가 세로축 (엑스 함수)
d = scanner.nextInt(); //c,d는 가로축 (와이 함수)
if (a == b || c == d) {
System.out.println(\"입력하신 도형은 사각형이 아닙니다\");
System.exit(0);//메인함수 종료
}// 사각형인지 직선인지 유무 판단
if (b < a)//b가 a보다 커야한다.
{
a = a ^ b;
b = a ^ b;
a = a ^ b; //xor 을 사용한 교체연산
}
if (d < c) //d가 c 보다 커야한다.
{
c = c ^ d;
d = c ^ d;
c = c ^ d;
}
// 여기까지가 준비단계 (변수입력, 사각형 유무 판단, 변수 크기순 정렬)
for (i = 2, j = 3; i < 4; i++, j++) {
for (m = 2, n = 3; m < 4; m++, n++) {
int Array1[] = {a, b, 25 * m, 25 * n};//m은 왼쪽 세로줄 n은 오른쪽 세로줄
int Array2[] = {c, d, 25 * i, 25 * j};//i는 아래쪽 가로줄 j는 위쪽 세로줄
if (Array1[1] < Array1[2])
continue;
if (Array2[1] < Array2[2])
continue;
if (Array1[3] < Array1[0])
continue;
if (Array2[3] < Array2[0])
continue; //겹치지 않는 경우들은 반복문을 탈출하여 결과값을 출력하지 않는다.
Arrays.sort(Array1);
Arrays.sort(Array2); //배열의 인자들을 크기순대로 나열한다.
result = (Array1[2] - Array1[1]) * (Array2[2] - Array2[1]);
if (result == 0)
continue;// 겹치긴 하는데 사각형의 변이 맞닿는 부분이 있을 때 0 출력 방지
System.out.println((i - 1) + \"-\" + (m - 1) + \" 구역에서 \" + result + \" 만큼 겹칩니다.\");
}//안쪽 for 닫음
}//바깥쪽 for 닫음
System.out.println(\"\");
System.out.println(\"겹치는 구역과 그 구역의 넓이값 출력을 완료했습니다.\");
System.out.println(\"출력이 되지 않았다면 겹치는 부분이 없는 것 입니다.\");
System.out.println(\"------*------*------*------*------*------*------*\");
}//while 문 무한루프
}//메인 메소드 닫음
}//클래스 닫음
(50,50), (100,100) 을 잇는 선분을 대각선으로 가지는 직사각형을 네개로 쪼개서 입력한 사각형과 각 구역에서 얼만큼 겹치는 지 계산하는 프로그램입니다.
import java.util.Arrays;
import java.util.Scanner;
public class Size {
public static void main(String[] args) {
while(true) {
int a, b, c, d;//a,b는 세로 축, c,d 는 가로 축이다.
int i, j, m, n;//반복문의 인자들
int result;// 사각형의 넓이 결과값
System.out.println(\"사각형은 다음과 같이 나눠집니다.\");
System.out.println(\"( 2-1 구역 2-2 구역 )\");
System.out.println(\"( 1-1 구역 1-2 구역 )\");
Scanner scanner = new Scanner(System.in);
System.out.println(\"이차원 평면 위의 정수 좌표를 가지는 두 점을 입력해주세요.\");
System.out.print(\"첫번 째 점의 x,y 좌표 : \");
a = scanner.nextInt();
c = scanner.nextInt();
System.out.print(\"두번 째 점의 x,y 좌표 : \");
b = scanner.nextInt(); //a,b가 세로축 (엑스 함수)
d = scanner.nextInt(); //c,d는 가로축 (와이 함수)
if (a == b || c == d) {
System.out.println(\"입력하신 도형은 사각형이 아닙니다\");
System.exit(0);//메인함수 종료
}// 사각형인지 직선인지 유무 판단
if (b < a)//b가 a보다 커야한다.
{
a = a ^ b;
b = a ^ b;
a = a ^ b; //xor 을 사용한 교체연산
}
if (d < c) //d가 c 보다 커야한다.
{
c = c ^ d;
d = c ^ d;
c = c ^ d;
}
// 여기까지가 준비단계 (변수입력, 사각형 유무 판단, 변수 크기순 정렬)
for (i = 2, j = 3; i < 4; i++, j++) {
for (m = 2, n = 3; m < 4; m++, n++) {
int Array1[] = {a, b, 25 * m, 25 * n};//m은 왼쪽 세로줄 n은 오른쪽 세로줄
int Array2[] = {c, d, 25 * i, 25 * j};//i는 아래쪽 가로줄 j는 위쪽 세로줄
if (Array1[1] < Array1[2])
continue;
if (Array2[1] < Array2[2])
continue;
if (Array1[3] < Array1[0])
continue;
if (Array2[3] < Array2[0])
continue; //겹치지 않는 경우들은 반복문을 탈출하여 결과값을 출력하지 않는다.
Arrays.sort(Array1);
Arrays.sort(Array2); //배열의 인자들을 크기순대로 나열한다.
result = (Array1[2] - Array1[1]) * (Array2[2] - Array2[1]);
if (result == 0)
continue;// 겹치긴 하는데 사각형의 변이 맞닿는 부분이 있을 때 0 출력 방지
System.out.println((i - 1) + \"-\" + (m - 1) + \" 구역에서 \" + result + \" 만큼 겹칩니다.\");
}//안쪽 for 닫음
}//바깥쪽 for 닫음
System.out.println(\"\");
System.out.println(\"겹치는 구역과 그 구역의 넓이값 출력을 완료했습니다.\");
System.out.println(\"출력이 되지 않았다면 겹치는 부분이 없는 것 입니다.\");
System.out.println(\"------*------*------*------*------*------*------*\");
}//while 문 무한루프
}//메인 메소드 닫음
}//클래스 닫음
님 설마 kgu.....? - dc App
Kgu가 뭐임
변수명 좀더 의미 있게 짓는거하고 swap할때 그냥 변수하나 더주셈 그게더 실행시빠르고 정상적인 방법 비트연산으로 꼭 해야겠으면 a^=b^=a^=b이렇게 하거나 차라리 이게 깔끔
한달배워서 이게 가눙함? - dc App
문법은 잘 몰라서 알고리즘반 짜놓고 책 뒤지면서 했어요
Temp 변수 생성하고 대입하는 것보단 비트연산이 더 효율적이지 않나요?
볼 진 모르겠는데 비트연산이 더 빠른데 저렇게 3줄 나눠서 쓰지 말고 a^=b^=a^=b 이렇게 한줄로 하는게 더 보기 좋음
감사합니다!