https://www.acmicpc.net/problem/5430
<문제 해설>
R이 입력되면 배열을 뒤집고 D가 입력되면 배열의 가장 앞에있는걸 삭제해야한다. 이걸 말그대로 뒤집어버리거나 배열의 앞칸을 지우게되면 말도안되는 시간이걸려 시간제한에 걸리게 될것이다. 따라서 index와 방향을 알려주는 direction 함수들을 사용했다. forntindex는 배열 맨 앞이 얼마나 지워졌는지 알려주고 backindex는 배열 맨뒤가 얼마나 지워졌는지 알려줄 것이다. direction은 배열을 뒤집었는지 뒤집지 않았는지를 알려줄 것이다. 이렇게 배열이 뒤집혔는지 배열에 어느부분이 삭제됐는지 표시됐다면, 삭제된 부분을 빼고 배열이 뒤집혔다면 역순으로 아니라면 정순으로 출력하면 된다.
<예시>
Command : RDD
ARRAY : [1,2,3,4]
R로 뒤집혔으니 뒤에있는 backindex가 D로인해 앞으로 2번 이동한다. 즉 뒤에 4,3이 순서대로 삭제된 효과를 만든다.
이제 direction이 배열이 뒤집혔다는 걸 알려줄테니 backindex부터 frontindex까지 출력하면 된다
출력값 : [2,1]
<코드>
T = int(input())
for i in range(T):
command = input()
n = int(input())
array= input().rstrip()[1:-1].split(',')
direction = 1
frontindex = 0
backindex = len(array)
errorcode = 0
for c in command:
if c == 'R':
if direction == 1:
direction = -1
else:
direction =1
if c == 'D':
if n == 0:
errorcode = 1
if direction == 1:
if frontindex <backindex:
frontindex +=1
else:
errorcode = 1
else:
if backindex > frontindex:
backindex -= 1
else:
errorcode = 1
if errorcode == 1:
print('error')
elif n == 0:
print('[]')
elif direction == 1:
print('['+",".join(array[frontindex:backindex])+']')
elif n == 1:
print('['+"".join(array[0])+']')
else:
print('['+",".join(array[backindex-1:frontindex:-1])+','+array[frontindex]+']')
<코드 설명>
T = int(input()) ://T값 받아오기
for i in range(T): //테스트 케이스 만큼 반복
command = input() //p명령 받아오는 함수
n = int(input()) //n값 받아오기
array= input().rstrip()[1:-1].split(',') // '[' 와 ']'를 제거하기위해 받은배열의 처음과 끝을 제거해주고
','를 구분문자로써 배열생성
direction = 1 //처음에는 배열이 뒤집지 않은 상태이다
frontindex = 0 //앞쪽 배열의 값
backindex = len(array) //뒤쪽 배열의 값
errorcode = 0 //에러가 있을시 error를 생성할 토큰값
for c in command: //command글자를 한글자씩 받아서 c로 저장
if c == 'R': //command가 R이면
if direction == 1: //배열이 안뒤집힌 상태면
direction = -1 //뒤집기
else: //뒤집힌 상태면
direction =1 //원상태로 복구
if c == 'D': //command가 D라면
if n == 0: //배열이 없는데 삭제할라하면
errorcode = 1 //에러가있다는 표식
if direction == 1: //안뒤집힌 상태라면
if frontindex <backindex: //배열이 공백이 아니라면
frontindex +=1 //앞인덱스를 증가시켜 맨앞 숫자를 삭제하는 효과를 만듬
else: //배열이 공백이면
errorcode = 1 //에러가 있다는 표식
else: //뒤집힌 상태라면
if backindex > frontindex: //배열이 공백이 아니라면
backindex -= 1 //뒷인덱스를 감소시켜 맨뒤에 있는 숫자를 삭제하는 효과를 만듬
else: //배열이 공백이면
errorcode = 1 //에러가 있다는 표식
if errorcode == 1: //에러가 있다는 표식이 있으면
print('error') //에러 출력
elif n == 0: //배열이 공백이고 D명령어를 입력한적이 없으면 []만 출력
print('[]')
elif direction == 1: //방향이 정방향이면
print('['+",".join(array[frontindex:backindex])+']') //frontindex부터 backindex까지 출력
elif n == 1: //방향이 역방향(뒤집혔는데) 배열에 숫자가 하나면
print('['+"".join(array[0])+']') //배열숫자 하나만 출력
else: //방향이 역방향이고 배열에 숫자가 둘이상이면
print('['+",".join(array[backindex-1:frontindex:-1])+','+array[frontindex]+']') //backindex부터 frontindex까지 출력해줌
'Coding Test > Python' 카테고리의 다른 글
[Python/백준] 10828 스택 (0) | 2023.01.11 |
---|---|
[Python/백준] 2869 달팽이는 올라가고 싶다 (1) | 2023.01.11 |
[Python/백준] 10815 숫자 카드 (0) | 2023.01.09 |
[Python/백준] 2751 수 정렬하기 2 (0) | 2023.01.08 |
[Python/백준] 2750 수 정렬하기 (0) | 2023.01.08 |
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간