728x90
반응형
2024.08.17기준 - 실버4
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 산책을 했을 때, 경로대로 갔을 때의 위치와 하나의 산책로를 제외한 위치 중 가장 거리가 가까운 위치를 출력하는 문제입니다.
1. 먼저 입력 받은 산책 경로를 저장을 해줍니다.
arr = new double[t][2];
for (int i = 0; i < t; i++) {
st = new StringTokenizer(br.readLine());
x = Double.parseDouble(st.nextToken());
y = Double.parseDouble(st.nextToken());
arr[i][0] = y;
arr[i][1] = x;
}
2. 그 후 저장된 산책 경로로 이동했을 시 나오는 좌표를 구합니다.
// 주어진 산책 경로로 이동했을 때 이동된 좌표를 구하는 함수.
private static int[] basics() {
double nowy = 0;
double nowx = 0;
for (int i = 0; i < t; i++) {
nowy += arr[i][0];
nowx += arr[i][1];
}
int[] result = new int[2];
result[0] = (int)nowy;
result[1] = (int)nowx;
return result;
}
3. 반복문을 통해 인덱스를 하나씩 함수에 넣어줘 해당 인덱스를 제외하고 이동한 후 거리를 구해줍니다.
그 중 가장 작은 값을 변수에 저장합니다.
double min = Integer.MAX_VALUE;
for (int i = 0; i < t; i++) {
// 해당 인덱스를 제외한 나머지를 확인하는 함수 호출
min = Math.min(min, removeLine(i));
}
// 주어진 산책 경로에서 하나를 제외한 거리를 계산해 주는 함수.
private static double removeLine(int removeIndex) {
double nowy = 0;
double nowx = 0;
for (int i = 0; i < t; i++) {
if (i != removeIndex) { // 해당 산책로를 제외한 위치
nowy += arr[i][0];
nowx += arr[i][1];
}
}
return Math.round(Math.sqrt(Math.pow(nowy, 2) + Math.pow(nowx, 2)) * 100) / 100.0;
}
4. 정리된 값을 출력해줍니다.
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
static int t;
static double[][] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
t = Integer.parseInt(br.readLine()); // 테스트 케이스 개수
double x, y;
StringTokenizer st;
arr = new double[t][2];
for (int i = 0; i < t; i++) {
st = new StringTokenizer(br.readLine());
x = Double.parseDouble(st.nextToken());
y = Double.parseDouble(st.nextToken());
arr[i][0] = y;
arr[i][1] = x;
}
double min = Integer.MAX_VALUE;
for (int i = 0; i < t; i++) {
// 해당 인덱스를 제외한 나머지를 확인하는 함수 호출
min = Math.min(min, removeLine(i));
}
int[] basic = basics();
sb.append(basic[1]).append(" ").append(basic[0]).append("\n").append(String.format("%.2f", min));
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
// 주어진 산책 경로로 이동했을 때 이동된 좌표를 구하는 함수.
private static int[] basics() {
double nowy = 0;
double nowx = 0;
for (int i = 0; i < t; i++) {
nowy += arr[i][0];
nowx += arr[i][1];
}
int[] result = new int[2];
result[0] = (int)nowy;
result[1] = (int)nowx;
return result;
}
// 주어진 산책 경로에서 하나를 제외한 거리를 계산해 주는 함수.
private static double removeLine(int removeIndex) {
double nowy = 0;
double nowx = 0;
for (int i = 0; i < t; i++) {
if (i != removeIndex) { // 해당 산책로를 제외한 위치
nowy += arr[i][0];
nowx += arr[i][1];
}
}
return Math.round(Math.sqrt(Math.pow(nowy, 2) + Math.pow(nowx, 2)) * 100) / 100.0;
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 1965번 상자넣기 (0) | 2024.08.19 |
---|---|
BEAKJOON / 백준 - JAVA 29891번 체크포인트 달리기 (0) | 2024.08.18 |
BEAKJOON / 백준 - JAVA 9291번 스도쿠 채점 (0) | 2024.08.16 |
BEAKJOON / 백준 - JAVA 7662번 이중 우선순위 큐 (0) | 2024.08.15 |
BEAKJOON / 백준 - JAVA 30618번 donstructive (0) | 2024.08.14 |