Big Ben
Big Ben's Log
Big Ben
전체 방문자
오늘
어제
  • 전체 글 (80)
    • 파이썬 (23)
      • 파이썬 기초 (5)
      • 클래스 (6)
      • 자료구조 (4)
      • Tensorflow (3)
      • PyTorch (2)
      • konlpy (1)
      • anaconda (1)
    • 머신러닝 (3)
      • 선형회귀 (1)
      • Tree 기반 (1)
    • 딥러닝 (6)
      • NLP (2)
      • VISION (2)
      • TABULAR (0)
      • 딥러닝 서버 구축 (2)
    • 그래프 이론 (1)
      • 그래프마이닝 (1)
      • GNN (0)
    • 강화학습 (3)
      • 강화학습 기본 (3)
    • 인공지능 (5)
    • 추천시스템 (2)
      • 추천시스템 기초 (2)
    • Competitions (1)
    • 빅데이터 (8)
      • 하둡 (3)
      • 스파크 (4)
      • 클라우드 (1)
    • SQL (7)
      • MariaDB (2)
    • 논문 리뷰 (2)
    • 대학원 (0)
      • 데이터 사이언스 (0)
      • 경제학 (0)
    • 선형대수학 (7)
      • 선형대수 ICE BREAKING (1)
      • 벡터 (5)
      • 고윳값 (1)
    • 개인프로젝트 (0)
      • 포트폴리오 대시보드 + AI기반 주식 자동매매 (0)
    • 재테크 (1)
    • 자동차 (0)
    • 알고리즘 (11)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • pytorch
  • sql
  • 선형대수학
  • class
  • 데이터베이스
  • 프로그래밍
  • Baekjoon
  • 객체
  • 데이터
  • 파이썬기초
  • 데이터사이언스
  • 코테
  • 딥러닝
  • AI
  • 코딩테스트
  • MariaDB
  • 빅데이터
  • 프로그래머스
  • 인공지능
  • 선형대수
  • 알고리즘
  • 하둡
  • 객체지향
  • PYTHON
  • mysql
  • 머신러닝
  • 자료구조
  • 파이썬
  • TensorFlow
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Big Ben

Big Ben's Log

[백준 19532] 수학은 비대면 강의입니다 / Cramer's Rule / 브루트 포스
알고리즘

[백준 19532] 수학은 비대면 강의입니다 / Cramer's Rule / 브루트 포스

2024. 3. 26. 00:57
반응형

이번에는 백준 브루트 포스 문제 중 연립방정식을 풀어야 하는 '수학은 비대면강의입니다'를 풀어보자.

 

이 문제는 크게 두 가지 방법으로 풀 수 있다.

  1. 브루트 포스 (for문 반복문 활용)
  2. Cramer 공식 (수학 지식 필요)

1번은 모든 시도를 다 해보는 것이기 때문에 우리가 쉽게 생각할 수 있는 부분이라고 생각이 들고

2번은 수없이 많은 수학 문제를 풀면서 얻은 내공 또는 선형대수학을 공부하던 시절을 기억해야 하기에 비전공자라면 쉽게 떠오르지 않을 수 있다.

 

하지만 2번이 더 효과적이라는 것!! 

그렇지만 브루트 포스 관점에서 1번이 오히려 백준이 요구하는 정답에 가깝지 않나 생각이 든다.

방법 1: 브루트 포스 

브루트 포스는 생각보다 간단하다.

모든 값은 -999와 999사이의 정수 값으로 할당이 되고, 또 유일한 해가 있는 문제이기 때문에 다음과 같이 for문을 사용해서 문제를 해결 할 수 있다.

if __name__ == '__main__':
    a, b, c, d, e, f = map(int, input().split())

    for i in range(-999, 1000):
        for j in range(-999, 1000):
            if ((a * i) + (b * j) == c) and ((d * i) + (e * j) == f):
                print(i, j)

위 for 문은 모든 경우의 수를 다 훑고 지나가기 때문에 첫번째 방정식과 두번째 방정식의 해가 되는 i와 j를 찾을 수 있다.

 

방법 2: Cramer's Rule

크래머 규칙으로도 연립방정식의 해를 구할 수 있다.

이 경우에서는 Cramer 규칙이 더 쉽고 빠르게 해를 찾게 해준다.

 

다음과 같은 연립방정식이 있을 때,

$$ ax + by = c $$

$$ dx + ey = f $$

 

위 방정식의 해는 Cramer's Rule을 활용하여 다음과 같이 계산할 수 있다.

$$ x = \frac{ce - bf}{ae-bd} $$

$$ y = \frac{af - cd}{ae-bd} $$

 

따라서, 정답을 도출하는 코드는 다음과 같다.

a, b, c, d, e, f = map(int, input().split())

print((c*e-b*f)//(a*e-b*d), (a*f-d*c)//(a*e-b*d))
반응형
저작자표시 (새창열림)

'알고리즘' 카테고리의 다른 글

투 포인터 (two pointer) 알고리즘이란?  (1) 2024.04.02
[leetcode 42] Trapping Rain Water - hard  (0) 2024.04.01
[백준 24313] 점근적 표기 1 문제 풀이 & 해설 - 파이썬  (0) 2024.03.24
[python] 등차수열과 등차수열의 합  (0) 2024.03.24
[백준 9506] 약수 합 - 파이썬  (0) 2024.03.18
    '알고리즘' 카테고리의 다른 글
    • 투 포인터 (two pointer) 알고리즘이란?
    • [leetcode 42] Trapping Rain Water - hard
    • [백준 24313] 점근적 표기 1 문제 풀이 & 해설 - 파이썬
    • [python] 등차수열과 등차수열의 합
    Big Ben
    Big Ben
    Data Scientist

    티스토리툴바