[BOJ]백준#8922 Silver 4 두찌수열🔂🔁(Python, 파이썬)

임준성·2022년 8월 31일
0

백준 Algorithm

목록 보기
53/59
post-thumbnail

백준 8922번
https://www.acmicpc.net/problem/8922

문제



후기

⏰ 풀이시간 20분 ++⏰

해시를 사용할 수 있게 힌트에 나와있지만, 사실 dictionary를 쓰지 않아도 되는 문제였다.

규칙에 따라 새로운 list를 만들어서 배열 안에 저장해두고, 새로 만들어 지는 list들이 매번 새로운지

확인하면 된다. 한번이라도 중복되게 만들어지면, LOOP를 돌고있다는 뜻이기 때문이다.

list의 길이 -1 만큼만 for문을 돌고, 마지막 list의 요소는 직접 넣어주는 방식을 사용했다.

마지막으로 break되며 만들어진 list가 0으로만 이루어져 있으면 0을 출력하고,

그렇지 않으면 LOOP를 돌고있다는 뜻이므로 문제가 요구하는대로 출력하면 되는 문제다.

import sys
input= sys.stdin.readline

T = int(input())
for _ in range(T):
    N = int(input())
    li = list(map(int,input().split()))
    result = []
    while True: # 루프를 계속 돌며 new_li를 만들예정
        new_li = []
        for i in range(len(li)-1):
            new_li.append( abs((li[i+1]-li[i])) ) #new_li의 i번째에는 li[i+1] - li[i] 의 양수값이 들어간다.
        new_li.append(abs((li[-1]-li[0]))) #new_li의 마지막은 li의 마지막 - 첫번째이다.
        if new_li not in result: #루프를 돌고있지 않으면
            result.append(new_li) #계속만든다.
            li= new_li
        else:
            result.append(new_li) #한번이라도 중복되면, 루프를 돌고있단얘기
            li= new_li
            break

    k= result[-1]
    if sum(k) == 0: #만약 0으로만 이루어져있으면
        print("ZERO")
    else:#그렇지 않다면
        print("LOOP")
profile
아무띵크 있이

0개의 댓글