🗒️ 파이썬 코드 풀이
from collections import deque
for tc in range(1,11) :
N = int(input())
lst = list(map(int,input().split()))
q = deque() # queue 자료 구조를 이용
for ls in lst :
q.append(ls)
cnt = 0 # 1~5씩 숫자를 높여가면서 queue에 뺄셈
while q[-1] : # Queue의 맨 마지막이 0이 되는 경우 종료
cnt += 1
tmp = q.popleft() - cnt
if tmp <= 0 : # Queue의 첫 요소에 -cnt 한 값이 0보다 작은 경우
ans = q
tmp = 0
q.append(tmp) # 0이된 요소 맨 뒤로 append
break
q.append(tmp)
if cnt == 5 : # 한 싸이클에 5개 제한
cnt = cnt % 5
str_q = " ".join(list(map(str,q)))
print(f"#{tc} {str_q}")
1. queue 함수를 q에 선언한다. (스택 구조로는 풀기 힘들다. Queue 구조로 하면 간단하게 풀이 가능)
2. 해당 조건에 맞는 식을 구성
(popleft 함수를 통해 queue에 첫번째 요소를 뺄 수 있고 ,append를 통해 마지막 요소에 붙히기 가능)
📌 문제 코멘트
조건 설정을 잘 해야돼서 약간의 까다로움이 있지만, 하나 하나 출력을 해보면 금방 할 수 있다.
처음 생각 난 방법은 공간이 큰 1차원 0 배열을 선언하고, 배열 가운데에 리스트를 넣을 생각이였다.
물론 이렇게도 되겠지만, Queue를 이용한 것 보다 훨씬 복잡해진다.
Queue 문제는 가끔가다 나오는데, 이때 스택을 쓰면 시간 복잡도가 커지기 때문에 잘 기억해두자.
📚 문제
다음 주어진 조건에 따라 n개의 수를 처리하면 8자리의 암호를 생성할 수 있다.
- 8개의 숫자를 입력 받는다.
- 첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.
다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고 맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다.
이와 같은 작업을 한 사이클이라 한다.
- 숫자가 감소할 때 0보다 작아지는 경우 0으로 유지되며, 프로그램은 종료된다. 이 때의 8자리의 숫자 값이 암호가 된다.
[제약 사항]
주어지는 각 수는 integer 범위를 넘지 않는다.
마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.
[입력]
총 10개의 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고, 그 다음 줄에는 8개의 데이터가 주어진다.
[출력]
#부호와 함께 테스트케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.
'알고리즘 > 알고리즘_swea' 카테고리의 다른 글
[Python][SWEA] 6808. 규영이와 인영이의 카드게임 (0) | 2024.05.08 |
---|---|
[Python][SWEA] 11315. 오목 판정 D3 (0) | 2024.05.08 |
[Python][SWEA] 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 D3 (0) | 2024.05.07 |
[Python][SWEA] 1493. 수의 새로운 연산 D3 (0) | 2024.05.06 |
[Python][SWEA] 1946. 간단한 압축 풀기 D2 (0) | 2024.05.05 |