쉽지만 어려운 문제 4종 세트다.
쉬운 이유 : 딱히 어려운 개념이 없고 구현도 쉬움
어려운 이유 : 중학교 기초 수학이 흐릿해진 나이라면 혼란할 수 있다. 쩝.. 내 얘기 맞다..
코드 구현은 전혀 어려운 게 없고 푸는 방법만 알면 되기 때문에 간단하게 정리했다.
나름 최선을 다해 그렸다.
현수가 있는 좌표인 x,y에서 경계선까지 가는 최단거리는 y, x, h-y, w-x 중 하나일 것이다.
최단거리는 당연히 Math.min으로 구하면 끝이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
int h = Integer.parseInt(st.nextToken());
int min1 = Math.min(x,y);
int min2 = Math.min(w-x,h-y);
System.out.println(Math.min(min1,min2));
}
}
|
cs |
축이 평행한 직사각형은 반드시 x의 좌표와 y의 좌표가 2쌍 존재할 수 밖에 없다.
따라서 입력 받은 x,y 값 중 짝이 없는 좌표를 출력하면 된다.
참고로 내가 하드코딩 하기 싫다는 이유로 객기 부리다가 조금 희한하게 풀었다.
마음에 안 들면 다른 풀이를 찾아보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private final static int ANGLE = 4;
private static boolean[] checkedX = new boolean[ANGLE-1];
private static boolean[] checkedY = new boolean[ANGLE-1];
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int[] x = new int[3];
int[] y = new int[3];
for (int i=0; i<ANGLE-1; i++) {
st = new StringTokenizer(br.readLine(), " ");
int inputX = Integer.parseInt(st.nextToken());
int inputY = Integer.parseInt(st.nextToken());
x[i] = inputX;
y[i] = inputY;
}
StringBuilder sb = new StringBuilder();
for (int i=0; i<ANGLE-2; i++) {
for (int j = i+1; j < ANGLE - 1; j++) {
if (x[i] == x[j]) {
checkedX[i] = true;
checkedX[j] = true;
}
if (y[i] == y[j]) {
checkedY[i] = true;
checkedY[j] = true;
}
}
}
for (int i=0; i< checkedX.length; i++) {
if (!checkedX[i]) {
sb.append(x[i]).append(" "); }
}
for (int i=0; i< checkedY.length; i++) {
if (!checkedY[i]) { sb.append(y[i]); }
}
System.out.println(sb.toString());
}
}
|
cs |
피타고라스의 정리 : 직각삼각형에서 빗변 길이의 제곱은 다른 두 변 길이의 제곱의 합과 같다.
쩝.. 이것도 기억이 잘 안 난다는 건 조금 충격적이긴 하다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private final static int SIDE = 3;
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
double[] sideArr = new double[3];
for (;;) {
st = new StringTokenizer(br.readLine(), " ");
int zeroCount = 0;
for (int i = 0; i < SIDE; i++) {
sideArr[i] = Math.pow(Integer.parseInt(st.nextToken()), 2);
if ( sideArr[i] == 0 ) zeroCount++;
}
if (zeroCount==3) break;
if (sideArr[0] + sideArr[1] == sideArr[2] ||
sideArr[0] + sideArr[2] == sideArr[1] ||
sideArr[1] + sideArr[2] == sideArr[0]) {
sb.append("right").append("\n");
} else {
sb.append("wrong").append("\n");
}
}
System.out.println(sb.toString());
}
}
|
cs |
기하학!
ㅋㅋ
죄송합니다.
우선 택시 기하학에 대한 건 아래 블로그에 쉽게 정리되어 있다
https://itholic.github.io/kata-taxicab-circle/
결론은 택시 기하학에서 원 넓이를 구하는 공식은 2 * R²이다.
다만 공식을 잊어버려도 나중에 다시 풀 수 있도록 설명을 한 번 쯤은 읽어보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
double R = Integer.parseInt(br.readLine());
System.out.println(R * R * Math.PI);
System.out.println(R * R * 2);
}
}
|
cs |
'CS ﹒ Algorithm > Baekjoon' 카테고리의 다른 글
Java 백준 문제풀이 (39) 10986 : 나머지 합 (0) | 2022.09.08 |
---|---|
Java 백준 문제풀이 (38) 11659, 11660 : 구간합구하기4,5 (0) | 2022.09.01 |
Java 백준 문제풀이 (36) 연산자 끼워넣기 (0) | 2022.08.06 |
Java 백준 문제풀이 (35) 15651: N과 M (3) (0) | 2022.08.03 |
Java 백준 문제풀이 (34) 2609: 최대공약수와 최소공배수 (0) | 2022.08.02 |