[백준] 19532번 : 수학은 비대면강의입니다 (브론즈 Ⅱ) - Java/자바

2025. 6. 8.·Problem Solving (Java)/백준
반응형


✅ 문제

문제링크

🔗 https://www.acmicpc.net/problem/19532

 


✅ 풀이

🔹 코드 1

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();
        int[] cons = new int[6];
        int x, y;

        for (int i = 0; i < 6; i++) {
            cons[i] =Integer.parseInt(st.nextToken());
        }

        for (int i = -999; i <= 999; i++) {
            for (int j = -999; j <= 999; j++) {
                int equation1 = cons[0] * i + cons[1] * j;
                int equation2 = cons[3] * i + cons[4] * j;
                if (equation1 == cons[2] && equation2 == cons[5]) {
                    x = i;
                    y = j;
                    sb.append(x).append(" ").append(y);
                }
            }
        }
        System.out.println(sb);
    }
}

 

$\begin{cases}\;ax\;+\;by\;=\;c\\\;dx\;+\;ey\;=\;f\end{cases}$

 

다음 연립방정식에서 $x$ 와 $y$ 의 값을 계산하는 문제이다.

$x$ 와 $y$ 가 각각 -999 이상 999 이하의 정수이므로 각각의 값을 하나씩 다 대입해보는 방식을 채택해보았다.

즉, 브루트 포스(Brute Force) 알고리즘을 사용해 보았다.

int형 cons 배열에 계수들을 입력받아 저장하고 이후에 for문을 통해 i가 x, j가 y로 각각 -999부터 999까지 값을 대입해서 맞는 값을 찾는다.

성립하는 x, y를 출력해주도록 한다.

 

🔹 결과 1

 

🔹 코드 2

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

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer token = new StringTokenizer(reader.readLine());
        StringBuilder sb = new StringBuilder();
        
        int a = Integer.parseInt(token.nextToken());
        int b = Integer.parseInt(token.nextToken());
        int c = Integer.parseInt(token.nextToken());
        int d = Integer.parseInt(token.nextToken());
        int e = Integer.parseInt(token.nextToken());
        int f = Integer.parseInt(token.nextToken());

        int x = (c * e - b * f) / (a * e - b * d);
        int y = (c * d - a * f) / (b * d - a * e);
        
        sb.append(x).append(" ").append(y);
        System.out.println(sb);
    }
}

 

연립방정식을 수학적으로 계산해서 $x,\;y$ 와의 관계를 찾아보도록 하자.

 

$a·e·x\;+\;b·e·y\;=\;c·e$

$b·d·x\;+\;b·e·y\;=\;b·f$

두 식을 빼보도록 하자.

$(a·e\;-\;b·d)·x\;=\;(c·e\;-\;b·f)$

 

$x\;=\;\cfrac{c·e\;-\;b·f}{a·e\;-\;b·d}$

 

 

$a·d·x\;+\;b·d·y\;=\;c·d$

$a·d·x\;+\;a·e·y\;=\;a·f $

두 식을 빼보도록 하자.

$(b·d\;-\;a·e)·y\;=\;(c·d\;-\;a·f)$

 

$y\;=\;\cfrac{c·d\;-\;a·f}{b·d\;-\;a·e}$

 

다음과 같이 $x,\;y$ 관계를 찾았으니 이를 코드로 구현해보자.

int x = (c * e - b * f) / (a * e - b * d);

int y = (c * d - a * f) / (b * d - a * e);

로 구현하고 x, y를 출력해주도록 한다.

여기서 x, y가 정수이므로 int형으로 선언하면 된다.

이렇게 하면 for문 반복을 하지 않아도 되므로 계산을 줄일 수 있다.

 

🔹 결과 2

 

🔹 알게된 정보

    • 수학적 내용을 코드로 작성하는 것에 대해 배우게 되었다.

 

🔹 브루트 포스(Brute Force)

    • 브루트 포스(Brute Force)는 문제를 해결하기 위해 가능한 모든 경우의 수를 전부 탐색하는 가장 단순하고 직관적인 알고리즘 기법이다.
    • 완전 탐색이라고도 한다.
    • 가능한 모든 경우를 하나하나 시도해보는 방식이다.
    • 정답을 보장하지만, 시간이 오래 걸릴 수 있다.
    • 구현이 간단하고 최적화보다는 정답성에 초점을 맞춘다.
    • 시간 복잡도가 매우 크므로 (보통 $O(n!)$, $O(2^{n})$, $O(n^{2})$ 등) 입력 크기가 조금만 현실적으로 실행 불가능해진다.
    • 가능한 경우의 수가 작고 더 나은 알고리즘이 복잡하거나 떠오르지 않을 때 사용한다.

 


반응형
저작자표시 비영리 동일조건 (새창열림)

'Problem Solving (Java) > 백준' 카테고리의 다른 글

[백준] 11650번 : 좌표 정렬하기 (실버 Ⅴ) - Java/자바  (0) 2025.06.11
[백준] 1018번 : 체스판 다시 칠하기 (실버 Ⅳ) - Java/자바  (2) 2025.06.09
[백준] 24267번 : 알고리즘 수업 - 알고리즘의 수행 시간 6 (브론즈 Ⅱ) - Java/자바  (2) 2025.06.03
[백준] 1978번 : 소수 찾기 (브론즈 Ⅱ) - Java/자바 (feat. 에라토스테네스의 체)  (2) 2025.05.29
[백준] 2869번 : 달팽이는 올라가고 싶다 (브론즈 Ⅰ) - Java/자바  (2) 2025.05.29
'Problem Solving (Java)/백준' 카테고리의 다른 글
  • [백준] 11650번 : 좌표 정렬하기 (실버 Ⅴ) - Java/자바
  • [백준] 1018번 : 체스판 다시 칠하기 (실버 Ⅳ) - Java/자바
  • [백준] 24267번 : 알고리즘 수업 - 알고리즘의 수행 시간 6 (브론즈 Ⅱ) - Java/자바
  • [백준] 1978번 : 소수 찾기 (브론즈 Ⅱ) - Java/자바 (feat. 에라토스테네스의 체)
sunghyun.dev
sunghyun.dev
개발 공부를 기록하는 블로그입니다.
  • sunghyun.dev
    개발 공부 기록 블로그
    sunghyun.dev
  • 전체
    오늘
    어제
    • 전체 글 (61)
      • Problem Solving (Java) (51)
        • 백준 (51)
        • 프로그래머스 (0)
      • Computer Science (2)
        • 자료구조 (0)
        • 알고리즘 (2)
        • 컴퓨터 구조 (0)
        • 운영체제 (0)
        • 컴퓨터 네트워크 (0)
      • Language (7)
        • Java (7)
        • Kotlin (0)
        • Python (0)
      • Framework (0)
        • Spring (0)
        • Node.js (0)
        • Vue.js (0)
        • React (0)
      • DBMS (0)
        • 데이터베이스 (0)
        • MySQL (0)
        • Oracle (0)
        • MariaDB (0)
      • Git (0)
      • Web (0)
      • Cloud (0)
      • 자격증 (0)
        • SQLD (0)
        • 정보처리기사 (0)
        • 오픽 (0)
        • AICE (0)
      • Toy Project (0)
      • IDE (0)
        • IntelliJ IDEA (0)
      • 기타 (0)
      • Tistory (1)
  • 링크

    • Github
    • Notion
  • 블로그 메뉴

    • 홈
    • 방명록
    • 태그
  • 인기 글

  • 태그

    스택
    Java
    덱
    gcd
    Comparator
    카운팅정렬
    배열
    재귀함수
    백준
    LCM
    유클리드호제법
    문자열
    HashMap
    알고리즘
    Deque
    조합
    최대공약수
    브루트포스
    코딩테스트
    이진탐색
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
sunghyun.dev
[백준] 19532번 : 수학은 비대면강의입니다 (브론즈 Ⅱ) - Java/자바
상단으로

티스토리툴바