barcode

백준 19532번 풀이

BOJ/[BOJ] Python

문제

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

 

19532번: 수학은 비대면강의입니다

정수 $a$, $b$, $c$, $d$, $e$, $f$가 공백으로 구분되어 차례대로 주어진다. ($-999 \leq a,b,c,d,e,f \leq 999$) 문제에서 언급한 방정식을 만족하는 $\left(x,y\right)$가 유일하게 존재하고, 이 때 $x$와 $y$가 각각 $-

www.acmicpc.net

연립일차방정식의 해를 찾는 문제. 문제에서는 해가 존재하는 연립일차방정식을 가정한다. (그래서 이 풀이대로 짜면 답이 없을 때 출력이 없음)

 

풀이

이 문제를 읽은 본인의 심정:

너는 고등학교 이과 선택하지 마라... 연립일차방정식 그거 푸는거 귀찮아서 코딩할 정도면 나중에 삼각함수 미적분 극한은 어쩌려고... 공대가면 미적분방정식도 있고 그 뭐지? 적분기호인데 가운데 동그라미 꼬지해둔 것도 있음. 우리과요? 미적은 안 쓰는데 통계 합니다.

 

보통은 소거법 가감법 이런걸 쓰는데, 이거 브루트 포스잖아요? 그래서 일일이 넣어보는 개쌉노가다를 해야 합니다... 애초에 백준에서 mpmath를 쓰게 둘 리 없잖아요? solve 던지면 다 끝날것을... 

 

import sys

a, b, c, d, e, f = map(int,sys.stdin.readline().split())

일단 양해를 좀 구하고 싶은 게, 백준 문제를 푸는 파이썬 파일은 하나다. 하나 풀고 새로 파일을 만드는 게 아니라(애초에 백준 풀이는 깃헙에 올리지도 않음) 그 파일 안에서 계속 푸는데, 여기에 올리면서는 지웠지만 백준 풀이에는 이전에 점근 표기법 문제 풀 때 달았던 주석이 아직도 남아있다. 주석이니까 문제 푼 건 맞았지.

 

for x in range(-999, 1000):
    for y in range(-999, 1000):
        pass

주제가 브루트포스다. 그리고 범위를 줬으면 무식하게 때려박아보는 게 순리 아니겠음?

 

import sys

a, b, c, d, e, f = map(int,sys.stdin.readline().split()) # 순서대로 a1 a0

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

연립방정식을 풀 때 소거법 가감법 이런걸 왜 하느냐... 변수가 두개라서? 놉. 해가 두 식을 다 만족해야 하기 때문이다. 그니까 ax+by=c와 dx+ey=f를 둘 다 만족하는 해를 찾는게 연립방정식을 푸는거다. 저기 미적분 붙으면 공포겠구만 아주...

 

아, 깜빡한 게 있다. 위에 너는 이과 오지 말아라... 근데 문과도 수학 쓰는 전공이 있습니다. 경제학과라던가... 그러니까 문제에 있는 수현이는 연립일차방정식도 귀찮아서 코딩하는 정도고 본인이 앞으로도 수학을 공부할 의지가 없다면 경제학과 가도 피똥싼다. 농담 아니고 저동네 미적 쓴다니까?

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 7785번 풀이  (0) 2023.08.04
백준 14425번 풀이  (0) 2023.07.31
백준 24313번 풀이  (0) 2023.07.17
백준 24267번 풀이  (0) 2023.07.15
백준 24266번 풀이  (0) 2023.07.13