본문 바로가기
PS/BOJ

[자바] 백준 25494 - 단순한 문제 (Small) (java)

by Nahwasa 2022. 8. 23.

 문제 : boj25494


 

필요 알고리즘 개념

  • 브루트포스 (완전탐색)
    • 모든 경우를 다 살펴보는 브루트포스 문제이다.
  • 나머지 연산 (기본 수학)
    • 나머지 연산이 무엇인지, 사용중인 언어에서 어떻게 계산할 수 있는지 알아야 한다.

※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.

 


 

풀이

  각 테스트 케이스마다, a,b,c의 모든 쌍을 확인하더라도 O(60^3) 의 시간복잡도이다. 따라서 모든 테스트케이스라고 해도 O(100*60^3)으로 시간복잡도는 충분하다. 그러니 모든 경우를 다 살펴보면 된다.

 

  3중 반복문으로 x,y,z를 호가정해서 문제에서 제시된 x mod y == y mod z == z mod x 인 경우를 카운팅 해주면 된다. 자마에서 mod(나머지 연산)은 '%'로 수행할 수 있다. 

 

 


 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        while (t-->0) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            int c = Integer.parseInt(st.nextToken());
            int cnt = 0;
            for (int i = 1; i <= a; i++) {
                for (int j = 1; j <= b; j++) {
                    for (int k = 1; k <= c; k++) {
                        if (i%j==j%k && j%k==k%i && i%j==k%i) {
                            cnt++;
                        }
                    }
                }
            }
            sb.append(cnt).append('\n');
        }
        System.out.println(sb);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글