1단계 직사각형
- 세로 길이가 A cm, 가로 길이가 B cm인 직사각형의 넓이를 cm2 단위로 구하고, 단위 (cm2)를 생략하여 출력한다.
import java.util.Scanner;
public class Step_1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
System.out.println(a*b);
}
}
A.
- 가로와 세로의 곱으로 넓이 구한다.
2단계 직사각형에서 탈출
- 한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Step_2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
int w = scan.nextInt();
int h = scan.nextInt();
int[] arr = { x, y, (w - x), (h - y) };
int low = arr[0];
for (int i=0; i<4; i++) {
if(arr[i]<low) {
low=arr[i];
}
}
System.out.println(low);
}
}
A.
- 최소 거리를 구하기 위해서 x, y 값과 w-x, h-y의 값 중 가장 작은 값을 구해준다.
3단계 네 번째 점
- 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
- 직사각형의 네 번째 점의 좌표를 출력한다.
import java.util.Scanner;
public class Step_3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[][] arr = new int[2][3];
for(int i=0; i<3; i++) {
for (int j=0; j<2; j++) {
arr[j][i]=scan.nextInt();
}
}
for(int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
if(arr[0][i]==arr[0][j]&&i!=j) {
arr[0][i]=0;
arr[0][j]=0;
}
}
}
for(int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
if(arr[1][i]==arr[1][j]&&i!=j) {
arr[1][i]=0;
arr[1][j]=0;
}
}
}
for(int i=0; i<2; i++) {
for (int j=0; j<3; j++) {
if (arr[i][j]!=0) {
System.out.print(arr[i][j]);
}
}
if (i==0) {
System.out.print(" ");
}
}
}
}
A.
- int 배열을 [2][3]으로 만들고, 각 1차원 배열에 x,y 좌표를 넣는 반복문을 만든다.
- 4번째 좌표는 x, y좌표 중 하나만 나온 좌표들의 집합이므로 반복문을 통해 각 좌표에서 중복되는 값을 0으로 처리한다.
- 각 좌표에서 0이 아닌 값을 출력한다.
4단계 수학은 체육과목 입니다
- "한 변의 길이가 1인 정사각형을 아래 그림과 같이 겹치지 않게 빈틈없이 계속 붙여 나간다. 가장 아랫부분의 정사각형이 n개가 되었을 때, 실선으로 이루어진 도형의 둘레의 길이를 구하시오.”
- 첫 번째 줄에 가장 아랫부분의 정사각형 개수 n이 주어진다. (1 ≤ n ≤ 109)
import java.util.Scanner;
public class Step_4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Long a = scan.nextLong();
System.out.println(4*a);
}
}
A.
- 답은 정사각형 개수의 4배 만큼이 된다.
- int 범위를 넘어가는 값이 나오기 때문에 long으로 변수 설정을 한다.
5단계 대지
- 첫째 줄에는 점의 개수 N (1 ≤ N ≤ 100,000) 이 주어진다. 이어지는 N 줄에는 각 점의 좌표가 두 개의 정수로 한 줄에 하나씩 주어진다. 각각의 좌표는 -10,000 이상 10,000 이하의 정수이다.
- 첫째 줄에 N 개의 점을 둘러싸는 최소 크기의 직사각형의 넓이를 출력하시오.
import java.util.Scanner;
public class Step_4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int test = scan.nextInt();
int[][] arr = new int[2][test];
for (int i=0; i<test; i++) {
for (int j=0; j<2; j++) {
arr[j][i]=scan.nextInt();
}
}
int xMax=arr[0][0], xMin=arr[0][0], yMax=arr[1][0], yMin=arr[1][0];
for (int i=0; i<test; i++) {
if (arr[0][i]>xMax) {
xMax=arr[0][i];
}
if (arr[0][i]<xMin) {
xMin=arr[0][i];
}
}
for (int i=0; i<test; i++) {
if (arr[1][i]>yMax) {
yMax=arr[1][i];
}
if (arr[1][i]<yMin) {
yMin=arr[1][i];
}
}
System.out.println((xMax-xMin)*(yMax-yMin));
}
}
A.
- 대지의 좌표는 x값의 최소값과 최대값/ y값의 최소값과 최대값을 이용하여 구할 수 있다.
6단계 삼각형 외우기
- 삼각형의 세 각을 입력받은 다음,
- 세 각의 크기가 모두 60이면, Equilateral
- 세 각의 합이 180이고, 두 각이 같은 경우에는 Isosceles
- 세 각의 합이 180이고, 같은 각이 없는 경우에는 Scalene
- 세 각의 합이 180이 아닌 경우에는 Error
- 를 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Step_6 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
int c = scan.nextInt();
boolean x = a==b, y = b==c, z = a==c;
if (a+b+c!=180) {
System.out.println("Error");
} else if (a==b&&b==c) {
System.out.println("Equilateral");
} else if (x||y||z) {
System.out.println("Isosceles");
} else {
System.out.println("Scalene");
}
}
}
A.
- a b c의 합을 먼저 조건으로 걸고 에러 출력, else if로 정사각형을 거르고, else if로 이등변 삼각형을 거르고 나머지를 일반 삼각형으로 취급한다.
7단계 삼각형과 세 변
- 각 줄에는 1,000을 넘지 않는 양의 정수 3개가 입력된다. 마지막 줄은 0 0 0이며 이 줄은 계산하지 않는다.
- 각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오.
import java.util.Scanner;
public class Step_7 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = "";
while (true) {
int a = scan.nextInt();
int b = scan.nextInt();
int c = scan.nextInt();
if (a==0&&b==0&&c==0) {
break;
}
boolean x= a==b, y= a==c, z= b==c;
boolean i= a>=b+c, j= b>=a+c, k= c>=a+b;
if (a==b&&b==c) {
str+="E";
} else if (i||j||k) {
str+="x";
} else if (x||y||z) {
str+="I";
} else {
str+="S";
}
}
for (int i=0; i<str.length(); i++) {
if(str.charAt(i)=='E') {
System.out.println("Equilateral");
}
if(str.charAt(i)=='I') {
System.out.println("Isosceles");
}
if(str.charAt(i)=='S') {
System.out.println("Scalene");
}
if(str.charAt(i)=='x') {
System.out.println("Invalid");
}
}
}
}
A.
- 삼각형의 성립 여부를 가장 먼저 체크(정사각형이 먼저 와도 됨)
- 이등변 삼각형-일반 삼각형 순으로 체크 후 출력
8단계 세 막대
- 영선이는 세 막대를 이용해서 아래 조건을 만족하는 삼각형을 만들려고 한다.
- 각 막대의 길이는 양의 정수이다
- 세 막대를 이용해서 넓이가 양수인 삼각형을 만들 수 있어야 한다.
- 삼각형의 둘레를 최대로 해야 한다.
- a, b, c가 주어졌을 때, 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Step_7 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
int c = scan.nextInt();
if (a>=b+c) {
System.out.println(2*(b+c)-1);
} else if (b>=a+c) {
System.out.println(2*(a+c)-1);
} else if (c>=a+b) {
System.out.println(2*(a+b)-1);
} else {
System.out.println(a+b+c);
}
}
}
A.
- 각 변의 길이 중 가장 긴 변의 길이가 다른 두 변의 길이 이상일 경우 삼각형이 되지 않는 점을 이용한다.
- 가장 긴 변의 길이가 나머지 두 변의 길이의 합-1으로 계산하여 둘레를 결정한다.
- 가장 긴 변의 길이가 나머지 두 변의 길이보다 작을 경우 세 변의 길이를 출력한다.
'백준' 카테고리의 다른 글
백준 닷컴 단계 별로 풀어보기 12단계 (1) | 2023.10.08 |
---|---|
백준 닷컴 단계 별로 풀어보기 11단계 (1) | 2023.10.08 |
백준 닷컴 단계 별로 풀어보기 9단계 (0) | 2023.10.06 |
백준 닷컴 단계 별로 풀어보기 8단계 (1) | 2023.10.05 |
백준 닷컴 단계 별로 풀어보기 7단계 (1) | 2023.10.05 |