블로그 이사🏡 했습니다. 👉🏻 둘러보기
본문 바로가기
  • What Get's You Here, Won't Get You There
CS/Problem-solving

백준 18512번 파이썬

by OMIN_ 2022. 4. 24.

문제 링크

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

 

18512번: 점프 점프

첫째 줄에 두 사람이 한 번에 멀리뛰기를 하는 거리 X, Y와 시작 지점의 위치 값 P1, P2가 각각 공백을 기준으로 구분되어 자연수로 주어진다. (1 ≤ X, Y, P1, P2 ≤ 100)

www.acmicpc.net

 

시간 제한 / 메모리 제한

1 초 256 MB

 

문제

두 학생 A와 B가 일직선상의 트랙에서 같은 방향으로 멀리뛰기를 하고 있다. A는 한 번에 X 미터를, B는 한 번에 Y 미터를 뛴다. 두 학생의 시작 지점과 X, Y에 대한 정보가 주어졌을 때, 두 학생이 공통적으로 지나게 되는 지점 중에서 시작 지점으로부터 가장 가까운 지점을 찾는 프로그램을 작성하시오.

예를 들어 한 번에 10미터를 뛰는 A는 30의 지점에서 멀리뛰기를 시작하고, 한 번에 12미터를 뛰는 B는 8의 지점에서 시작한다고 가정하자. A가 5번의 멀리뛰기를 하고, B가 6번의 멀리뛰기를 하면 두 사람은 80의 지점을 공통으로 지나게 되며, 이는 두 학생의 시작 지점에서 가장 가까운 지점이다.

입력

첫째 줄에 두 사람이 한 번에 멀리뛰기를 하는 거리 X, Y와 시작 지점의 위치 값 P1, P2가 각각 공백을 기준으로 구분되어 자연수로 주어진다. (1 ≤ X, Y, P1, P2 ≤ 100)

출력

첫째 줄에 두 학생이 공통적으로 지나는 지점 중에서 가장 가까운 지점을 출력한다.

단, 두 학생이 공통적으로 지나는 지점이 없다면 -1을 출력한다.

예제 입력

10 12 30 8

예제 출력

80

 

 

풀이 코드

x, y, p1, p2 = map(int, input().split())
cnt = 1

found = False
xVisited = [p1]
yVisited = [p2]

while cnt < 1000:
    p1 += x
    p2 += y
    xVisited.append(p1)
    yVisited.append(p2)

    if p1 in yVisited or p2 in xVisited:
        print(min(p1, p2))
        found = True
        break
    cnt += 1

if not found:
    print(-1)

처음에는 10^5 ~ 10^6 까지는 고려하려 했으나, 시간 초과인 관계로 1000까지만 고려했는데 정답이 나왔다.

'CS > Problem-solving' 카테고리의 다른 글

백준 9012번 파이썬  (0) 2022.04.26
백준 1145번 파이썬  (0) 2022.04.24
백준 10448 파이썬  (0) 2022.04.24
백준 7568번 파이썬  (0) 2022.04.23
백준 2851 파이썬  (0) 2022.04.23

댓글