스파르탄 365 5주차 (1) AC
참고사이트: 발현되지 못한 잠재력
5주차
백준 5430번 AC
문제링크 : https://www.acmicpc.net/problem/5430
💡 풀이 중 고민
- [1,2,3,4]를 입력받아서 리스트로 어떻게 변환하지?
! 문자열 슬라이싱을 이용하는 방법이 있다.
arr = sys.stdin.readline()[1:-2].split(",")
- 런타임 에러 났다.
-> 검색을 해 보니 'R' 명령어 때 진짜로 문자열을 다 뒤집어주면 시간초과 및 런타임 에러가 발생하는 것 같다
! 해결 방법
: R의 개수를 파악해서 홀수, 짝수일 때를 파악해 앞에서 자를지 뒤에서 자를지 결정
!! 스킬
arr = input()[1:-2].split(',')
cmd_p = cmd_p.replace('RR','') #R이 두번이면 원상 복구 되므로 명령어에서 제거
print('[' + ','.join(arr[::-1]) + ']')
print('[' + ','.join(arr) + ']')
깨달음
: 그러면 O(n)으로 끝낼 수 있다.
풀이
import sys
input = sys.stdin.readline
T = int(input())
for _ in range(T):
cmd_p = input()
n = int(input())
arr = input()[1:-2].split(',')
cmd_p = cmd_p.replace('RR','') #R이 두번이면 원상 복구 되므로 명령어에서 제거
cntR = 0
delF, delB = 0, 0 # R의 개수에 따라 앞에서 제거할지 뒤에서 제거할지 세는 변수
for cmd in cmd_p:
if cmd == 'R':
cntR += 1
elif cmd == 'D':
if cntR%2 == 0:
delF += 1
else:
delB += 1
if delF+delB <= n:
arr = arr[delF:n-delB]
if cntR%2 == 1:
print('[' + ','.join(arr[::-1]) + ']')
else:
print('[' + ','.join(arr) + ']')
else:
print('error')
Author And Source
이 문제에 관하여(스파르탄 365 5주차 (1) AC), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dawnofspring/스파르탄-365-5주차-1-AC저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)