문제 링크
https://www.acmicpc.net/problem/19532
문제
수현이는 4차 산업혁명 시대에 살고 있는 중학생이다.
코로나 19로 인해, 수현이는 버추얼 학교로 버추얼 출석해 버추얼 강의를 듣고 있다.
수현이의 버추얼 선생님은 문자가 2개인 연립방정식을 해결하는 방법에 대해 강의하고,
다음과 같은 문제를 숙제로 냈다.
ax + by = c
dx + ey = f
4차 산업혁명 시대에 숙제나 하고 앉아있는 것보다
버추얼 친구들을 만나러 가는 게 더 가치있는 일이라고 생각했던 수현이는
이런 연립방정식을 풀 시간이 없었다.
다행히도, 버추얼 강의의 숙제 제출은 인터넷 창의 빈 칸에 수들을 입력하는 식이다.
각 칸에는 -999 이상 999 이하의 정수만 입력할 수 있다.
수현이가 버추얼 친구들을 만나러 버추얼 세계로 떠날 수 있게 도와주자.
입력
정수 a, b, c, d, e, f가 공백으로 구분되어 차례대로 주어진다.
(-999 ≤ a, b, c, d, e, f ≤ 999)
문제에서 언급한 방정식을 만족하는 (x, y)가 유일하게 존재하고, 이 때
x와 y가 각각 -999 이상 999 이하의 정수인 경우만 입력으로 주어짐이 보장된다.
출력
문제의 답인 x와 y를 공백으로 구분해 출력한다.
예제
입력
1 3 -1 4 1 7
출력
2 -1
정답 및 풀이
import sys
input = sys.stdin.readline
a,b,c,d,e,f = map(int,input().split())
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)
- import sys
- 빠른 입력을 사용하기 위해 sys 모듈을 불러온다.
- input = sys.stdin.readline
- 표준 입력 함수에 빠른 입력 함수를 연결한다.
- 많은 값 입력 시 성능을 높인다.
- a, b, c, d, e, f = map(int, input().split())
- 공백으로 구분된 6개의 정수를 입력받아 각각 a, b, c, d, e, f에 저장한다.
- 문제의 두 연립 방정식 계수들이다.
- for x in range(-999, 1000):
- x를 -999부터 999까지 반복한다.
- 문제 조건에서 x의 범위가 정해져 있으므로 완전 탐색한다.
- for y in range(-999, 1000):
- y를 -999부터 999까지 반복한다.
- x와 마찬가지로 정수 범위를 전부 확인한다.
- if a*x + b*y == c and d*x + e*y == f:
- 연립방정식 두 식을 모두 만족하는지 검사한다.
- 조건이 참이면 해당 (x, y)가 정답이다.
- print(x, y)
- 조건을 만족한 x, y를 출력한다.
- sys.exit()
- 해는 유일하므로, 답을 찾은 즉시 프로그램을 종료한다.
- 불필요한 반복을 줄여 성능을 최적화한다.
'백준' 카테고리의 다른 글
| [백준] 1436 : 영화감독 숌 (Python/파이썬) (0) | 2025.11.15 |
|---|---|
| [백준] 1018 : 체스판 다시 칠하기 (Python/파이썬) (0) | 2025.11.15 |
| [백준] 2231 : 분해합 (Python/파이썬) (0) | 2025.11.10 |
| [백준] 2798 : 블랙잭 (Python/파이썬) (0) | 2025.11.10 |
| [백준] 1934 : 최소공배수 (Python/파이썬) (0) | 2025.11.10 |