백준 7568 브루트 포스 알고리즘

changho Youn·2023년 11월 6일
0

출처: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());
    }
}

어려웠던 점 및 사고과정


어려웠던 부분은 딱히 없다.

  1. 이중 For문을 순회하는데 현재 i index는 각각의 사람이라 생각하면 된다.
  2. j 인덱스의 경우, 비교 대상이 되는 사람이다. 그러므로 i와 j는 비교해줄 필요가 없다. 같은 사람을 가르키기 때문이다.
  3. 현재 나(i)와 다른사람(j)를 비교하면서, 나보다 크고 무게가 많이 나가는 사람이 있다면, 나의 order를 1올려준다. 그리고 stringbuilder를 이용하여 sb에 append하여 최종적인 결과를 출력
profile
BackEnd Developer ChangDDAO입니다.🐌

0개의 댓글

관련 채용 정보