개발자일걸요..?

4084번 Viva la Diferencia 본문

알고리즘코딩/Baekjoon Online Judge

4084번 Viva la Diferencia

Re_A 2021. 11. 4. 22:17
728x90
반응형

링크 : https://www.acmicpc.net/problem/4084

 

4084번: Viva la Diferencia

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, a, b, c, d가 순서대로 주어진다. 입력의 마지막 줄에는 0이 4개 주어진다. (1 ≤ a,b,c,d ≤ 2,000,000,000)

www.acmicpc.net

 


 

문제

네 개의 양의 정수 a, b, c, d가 있을 때, 아래와 같이 차이를 계산할 수 있다.

|a-b| |b-c| |c-d| |d-a|

이렇게 나온 네 개의 수를 이용해서 다시 또 차이를 계산할 수 있다. 이 작업을 모든 네 개의 정수가 같아질 때까지 반복한다.

예를 들어, 1, 3, 5, 9로 시작했을 때를 생각해보자.

1 3 5 9

2 2 4 8 (1)

0 2 4 6 (2)

2 2 2 6 (3)

0 0 4 4 (4)

0 4 0 4 (5)

4 4 4 4 (6)

위의 경우에서 수열은 6번 만에 수렴한다. a, b, c, d가 주어졌을 때, 이 수열이 얼마나 빨리 수렴하는지 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, a, b, c, d가 순서대로 주어진다. 입력의 마지막 줄에는 0이 4개 주어진다. (1 ≤ a,b,c,d ≤ 2,000,000,000)

출력

각 테스트 케이스에 대해서, 수열이 몇 번 만에 수렴하는지 출력한다.

예제 입력 1

1 3 5 9

4 3 2 1

1 1 1 1

0 0 0 0

예제 출력 1 

6 4 0

 


 

시뮬레이션 알고리즘 이용

직접 a-b, b-c, c-d, d-a의 절댓값을 구하고 비교.

 

입력 예시를 통해 확인

  a b c d
0번 1 3 5 9
1번 2 2 4 8
2번 0 2 4 6
3번 2 2 2 6
4번 0 0 4 4
5번 0 4 0 4
6번 4 4 4 4

 


 

작성한 코드

a,b,c,d = list(map(int,input().split(' ')))
while not(a==0 and b==0 and c==0 and d==0):
    count = 0
    while True:
        if a==b and b==c and c==d:
            break
        a,b,c,d = abs(a-b),abs(b-c),abs(c-d),abs(d-a)
        count+=1
    print(count)
    a, b, c, d = list(map(int, input().split(' ')))

 

반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

14950번 3n+1수열  (0) 2021.11.04
13698번 Hawk eyes  (0) 2021.11.04
10812번 바구니 순서 바꾸기  (0) 2021.11.04
18870번 좌표 압축  (0) 2021.04.06
11444번 피보나치 수 6  (0) 2021.04.03
Comments