반응형
1. 문제 추상화
A(x, y), B(p, q)에서 x > p 그리고 y > q 이면 A가 B보다 크다고 할 때,입력된 값들의 크기 순위를 매겨라. 순위는 자신보다 큰 수의 개수 + 1이다.
2. 알고리즘
풀이는 쉽지만 문제 뉘앙스가 헷갈릴 여지가 있다. 상식적으로 몸무게가 같고 키가 크면 덩치가 더 크다 말할 수 있다. 그러나 여기서는 아니다. 키와 몸무게가 둘 다 커야 덩치가 큰거다. 문제를 풀 때는 상식이 아닌 조건으로 풀어야 한다.
1. 이차원 배열 생성 및 입력
2. [ A(x, y), B(p, q)에서 x > p 그리고 y > q ] 조건에 부합하는 경우 탐색 ( 브루트 포스 )
3. 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
private static StringTokenizer stz;
private static BufferedReader br;
private static BufferedWriter bw;
private static StringBuilder sb;
private static int[][] people;
public static void main(String[] args) throws NumberFormatException, IOException {
createObjects();
createPeopleArr(); // 이차원 배열 생성 및 초기화
processRank(); // 랭크 연산 처리
}
public static void createObjects(){
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
sb = new StringBuilder();
}
public static void createPeopleArr() throws NumberFormatException, IOException {
makePeopleArr();
setPeopleArr();
}
public static void processRank() throws IOException {
getRank();
printRank();
closeIO();
}
public static void makePeopleArr() throws NumberFormatException, IOException{
int testcase = Integer.parseInt(br.readLine());
people = new int[testcase][2];
}
public static void setPeopleArr() throws IOException {
for(int i=0;i<people.length;i++) {
stz = new StringTokenizer(br.readLine());
int weight = Integer.parseInt(stz.nextToken());
int height = Integer.parseInt(stz.nextToken());
people[i][0] = weight;
people[i][1] = height;
}
}
public static void getRank() {
for(int i=0; i<people.length;i++) {
sb.append(countRank(i)+1).append(" ");
}
}
public static void printRank() throws IOException {
bw.write(sb.toString());
bw.flush();
}
public static void closeIO() throws IOException {
bw.close();
br.close();
}
public static int countRank(int i) {
int weight = people[i][0];
int height = people[i][1];
int count = 0;
for(int j=0; j<people.length;j++) {
if(i==j)continue;
if(isBig(weight,height,j)) {
count++;
}
}
return count;
}
public static boolean isBig(int weight, int height, int j) {
if( weight < people[j][0] && height < people[j][1]) {
return true;
}
return false;
}
}
반응형
'문제풀이 > BruteForce' 카테고리의 다른 글
[PS] BOJ6064 카잉달력 ( math, bruteforce ) With 파이썬 (0) | 2023.06.29 |
---|---|
[CodingTest] BOJ1107 리모컨 ( 브루트포스 ) With 파이썬 (0) | 2023.06.20 |
[CodingTest] BOJ3085 사탕게임 ( BruteForce ) With 파이썬 (0) | 2023.06.15 |
[JAVA] 백준 2231번 분해합 : 브루트 포스 (0) | 2021.07.29 |
[JAVA] 백준 2798번 블랙잭 : 브루트포스 (0) | 2021.07.28 |