티스토리 뷰

알고리즘/백준

카잉 달력 6064번 백준

글을 쓰는 개발자 2020. 12. 4. 19:23
반응형

문제:www.acmicpc.net/problem/6064

 

6064번: 카잉 달력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.

www.acmicpc.net

이 문제는 시간초과를 해결하지 못한 문제이다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys
def gcd(left,right):
    if right==0:
        return left
    return gcd(right,left%right)
 
 
testCase = int(sys.stdin.readline())
for _ in range(testCase):
    N,M,fx,fy=map(int,sys.stdin.readline().rstrip().split())
    x,y=1,1
    count=1
    if M>N:
        big=M
        small=N
    else:
        big=N
        small=M
    total=(big*small)/gcd(big,small)
    while True:
        if count>total:
            print(-1)
            break
        if fx==and fy==y:
            print(count)
            break
 
        if count==1:
            x=fx
            if(1+fx-x)%M!=0:
                y=(1+fx-1)%M  
            else: y=M
            count=fx
        else:
            if (y+N)%M!=0:
                y=(y+N)%M
            else: y=M
            count+=N
cs

 

 

처음에 이 문제를 접근했을 때에는 날짜 계산으로 접근하다가 아무래도 시간에 대한 제한에 걸릴 것 같아서 N,M의 최소공배수를 구한 다음에 그 숫자 이전까지 내가 찾고자 하는 값이 있는지 확인하는 식으로 코드를 짰다. 근데 아무래도 최소공배수 구하는 과정이 시간초과로 가지 않았나 싶다. 

그래서 구글에 검색하여 정답코드를 봤다.

 

1
2
3
4
5
6
7
8
9
10
11
def num(m, n, x, y):
    while x <= m * n:
        if (x - y) % n == 0:
            return x
        x += m
    return -1
 
= int(input())
for i in range(t):
    m, n, x, y = map(int, input().split())
    print(num(m, n, x, y))
cs

 

 

 

참고: https://pacific-ocean.tistory.com/126

 

[백준] 6064번(python 파이썬)

문제 링크: https://www.acmicpc.net/problem/6064 6064번: 카잉 달력 문제 최근에 ICPC 탐사대는 남아메리카의 잉카 제국이 놀라운 문명을 지닌 카잉 제국을 토대로 하여 세워졌다는 사실을 발견했다. 카잉

pacific-ocean.tistory.com

내가 찾고자 하는 값이 K라 하자.  K에 X를 빼고 M을 나눈 나머지가 0 또는 K에 Y를 빼고 N을 나눈 나머지가 0이었을 때유효한 표현이다. 그렇다면 X에서 K까지 더한 다음 Y를 빼고 그 값에 N을 나눌 때 나머지가 0이 된다면 참이 된다는 소리이다. 단 X에서 K까지 더할 때에는 +M식 해야 한다. 왜냐하면 (K-X)%M=0라는 식이 성립하기 때문이다.

 

그러면 위와 같은 식이 완성된다.

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

1107번 리모컨 백준  (0) 2020.12.05
RGB거리2 17404번 백준  (0) 2020.12.04
1,2,3 더하기3 15988번 백준  (0) 2020.12.03
가장 긴 증가하는 부분 수열 4 14002번 백준  (0) 2020.12.02
합분해 2225번 백준  (0) 2020.12.02
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함