1. Scanner 사용
import java.util.Scanner;
public class size_7568 {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] arr = new int[2][n];
int[] raking = new int[n];
for (int i = 0; i < n; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
arr[0][i] = x;
arr[1][i] = y;
}
for(int j = 0; j < n; j++) {
int k = 0;
int maxX = arr[0][j];
int maxY = arr[1][j];
for (int a = 0; a < n; a++) {
if (arr[0][a] > maxX && arr[1][a] > maxY) {
k++;
}
}
raking[j] = k+1;
}
for (int s = 0; s < n; s++) {
System.out.print(raking[s] + " ");
}
}
}
등수는 k+1로 출력할 수 있다.
k는 나보다 덩치가 큰 사람의 수라고 표현할 수 있다.
현재 비교할 사람보다 몸무게와 키가 모두 큰 사람이 있을 경우에만 k를 더해주면 된다.
나머지 경우는 고려할 필요가 없었다.
2개의 행을 가지는 2차원 배열을 선언한 후, arr [행][열]
x, y를 입력받고 배열에 넣어준다.
이후 for문을 통해 덩치를 비교하는데,
해당 사람의 몸무게와 키를 max로 정해두고, 이보다 큰 사람이 있을 경우 k를 증가시켰다.
그리고 int 배열에 결과값을 저장하여 출력했다.
2. BufferedReader 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class size_7568 {
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int[][] arr = new int[2][n];
int[] raking = new int[n];
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
arr[0][i] = x;
arr[1][i] = y;
}
for(int j = 0; j < n; j++) {
int k = 0;
int maxX = arr[0][j];
int maxY = arr[1][j];
for (int a = 0; a < n; a++) {
if (arr[0][a] > maxX && arr[1][a] > maxY) {
k++;
}
}
raking[j] = k+1;
sb.append(raking[j]).append(" ");
}
System.out.println(sb);
}
}
실행 시간을 줄이기 위해 BufferedReader도 사용해봤다.
확실히 시간이 반으로 줄은 것을 확인할 수 있었다.
BufferedReader를 사용하기 위해서는 StringTokenizer도 필요했다.
split 사용이 적절하지 않은 이유 : spilt은 배열에 담아 반환하기 때문에, StringTokenizer보다 느리다. 데이터의 양이 적을 때는 StringTokenizer 사용이 적절하다.
한 줄에 두 개의 값이 있고, 그 값을 분리해내야 하기 때문에,
nextToken()을 사용하여 공백을 기준으로 값을 분리한 후 첫번째 토큰은 x, 두번째 토큰은 y에 넣어줬다.
덩치를 비교하는 것은 위와 같고,
이후 StringBuiler를 사용하여 결과를 한 줄로 출력했다.
'JAVA' 카테고리의 다른 글
[JAVA][백준] 11866_요세푸스 문제 0 (Queue) (0) | 2024.05.01 |
---|---|
[JAVA][백준] 1676_팩토리얼 0의 개수 (0) | 2024.04.23 |
[JAVA][백준] 2751_수 정렬하기 2 (0) | 2024.04.18 |
[JAVA][백준] 1181_단어정렬 (Comparator) (1) | 2024.04.18 |
[JAVA][백준] 10989_수 정렬하기 3 (BufferedReader) (0) | 2024.04.16 |