문제
: 값이 X와 Y로 총 두개의 값이 여러줄로 들어온다
: XY 모두 크면 더 높은 순위
: X나 Y 중 하나만 클 경우 같은 순위
: X와 Y 모두 작을경우 낮은 순위
문제링크 : https://www.acmicpc.net/problem/7568
원리
: 브루트 포스
풀이방법
1. 값을 받을 객체 클래스를 선언한다(나의 코드의 경우엔 Size라는 이름으로 했다)
2. 첫 번째 부터 끝까지 모두 값을 얻어서 Size객체로 리스트에 저장한다(혹은 매트릭스 등 다른 자료구조도 가능)
3. 리스트에 저장된 값을 하나씩 꺼내서 다른 값과 비교를 한다.
4. 이때, 다른 값보다 X, Y 모두 작으면 순위(count)를 +1한다.
5. 비교하는 반복이 끝날 때마다 BufferWriter에 입력해준다.
6. 기준이 되는 Size를 뽑을 때마다 count는 1로 초기화 해준다
(기준이 되는 Size보다 큰 Size가 없을 경우, 1위이기 때문에 1로 초기화)
7. 어차피 본인도 본인보다 작거나 크지 않으므로 모든 수를 돌아도 된다.
8. 모든 반복이 끝나면 출력한다.
나의 코드
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
List<Size> list = new ArrayList<>();
for(int i=0; i<T ; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
Size size = new Size(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
list.add(size);
}
for(int i=0 ; i<T ; i++) {
int count = 1;
Size size1 = list.get(i);
for(int j=0; j<T ; j++) {
Size size2 = list.get(j);
if(size1.getX()<size2.getX() && size1.getY()<size2.getY()) {
count++;
}
}
bw.write(""+count+"\n");
}
bw.close();
}
static class Size {
private int X;
private int Y;
public Size(int X, int Y) {
this.X = X;
this.Y = Y;
}
public int getX() {
return X;
}
public int getY() {
return Y;
}
}
}
'알고리즘 저장소 (일반방식과 나만의 풀이) > JAVA' 카테고리의 다른 글
[백준] no10989: 수 정렬하기 3 (0) | 2023.01.21 |
---|---|
[백준] no2839: 설탕 배달 (0) | 2023.01.20 |
[백준] no11650: 좌표 정렬하기 (0) | 2023.01.18 |
[백준] no15829: 해싱(Hashing) (0) | 2023.01.18 |
[백준] no10250: ACM호텔 (0) | 2023.01.16 |