728x90
출처:https://www.acmicpc.net/problem/7568

브루트 포스 알고리즘
영어 brute는 "짐승 같은, 난폭한"이라는 뜻이고, brute-force는 "(정제되지 않은) 난폭한 힘, 폭력"이라는 뜻이다. 시간과 자원이 엄청나게 들어서 얼핏 보면 무식하다고 생각할 수도 있겠지만, 정확도 100%를 보장한다는 점에서 암호 해독법 중 가장 확실하고 무서운 방법이다. 이론적으로 가능한 모든 경우의 수를 다 검색해 보는 것이라 정확도 100%가 항상 보장되니, 암호학에서는 가장 확실한 방법으로 통용되고 있다. 무엇보다도 암호 확인 작업은 손으로 입력한 문자열의 동일 여부를 확인하는 것이기 때문에, 가능한 경우의 수를 하나씩 대입하다 보면 언젠가는 암호를 찾을 수 있게 되는 식이다. 다만 정말로 그냥 무식하게 때려 박는 건 아니고, 숫자만 섞어서 대입해 보기 한 번, 로마자만 섞어서 대입해 보기 한 번 이런 식으로 하다가 안 되면 나머지를 순차적으로 하는 식으로 특정 규칙에 따라 우선순위를 두고 하기도 한다. 출처: 나무위키
소스코드
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//https://www.acmicpc.net/problem/7568 문제출처
public class Baek7568 {
static int n;
static int [][] hw;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
n = Integer.parseInt(br.readLine());
hw = new int[n][2];
for (int i = 0; i < n; i++) {
String[] temp = br.readLine().split(" ");
hw[i][0] = Integer.parseInt(temp[0]);
hw[i][1] = Integer.parseInt(temp[1]);
}
//완전탐색하면서 순서 매기기
for (int i = 0; i < n; i++) {
int order = 1;
for (int j = 0; j < n; j++) {
if(i==j) continue;
if (hw[i][0] < hw[j][0] && hw[i][1] < hw[j][1]) {
order++;
}
}
sb.append(order).append(" ");
}
System.out.println(sb.toString());
}
}
어려웠던 점 및 사고과정
어려웠던 부분은 딱히 없다.
- 이중 For문을 순회하는데 현재 i index는 각각의 사람이라 생각하면 된다.
- j 인덱스의 경우, 비교 대상이 되는 사람이다. 그러므로 i와 j는 비교해줄 필요가 없다. 같은 사람을 가르키기 때문이다.
- 현재 나(i)와 다른사람(j)를 비교하면서, 나보다 크고 무게가 많이 나가는 사람이 있다면, 나의 order를 1올려준다. 그리고 stringbuilder를 이용하여 sb에 append하여 최종적인 결과를 출력
'알고리즘' 카테고리의 다른 글
| 백준 2343번 binary search (0) | 2023.12.01 |
|---|---|
| 백준 2346번 분할정복 알고리즘 -java (0) | 2023.12.01 |
| 백준 1012번 유기농배추 문제풀이 -java (0) | 2023.12.01 |
| 백준 15686 백트랙킹 알고리즘 -java (0) | 2023.12.01 |
| 백준 1010번 Combination -java (0) | 2023.12.01 |