선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다.
함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다.
함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. 예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 숫자를 버리는 함수이다.
배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오.
처음에는 list + slicing
으로 풀었지만 시간초과났다.
그 외에도 입출력 등 문제가 많았는데, 평소에도 헷갈리던 개념들을 한번에 정리하는 기회가 됐다.
split()은 문자열을 나눈다. list를 나눌 수 X
nums = [arr[i] for i in range(1, len(arr)-1, 2)]
nums = nums.split(',') #==> 취소
slicing의 범위가 [a:b]일 때, a이상 b미만 (b는 포함하지 X)
if R % 2 == 0:
nums = nums[1:]
print('R=0->{}'.format(nums))
else:
nums = nums[:len(nums)-2] #==> [:len(nums)-1]
print('R=1->{}'.format(nums))
reverse는 값을 반환X, 단지 해당 list를 섞어준다.
if err:
print('error')
else:
if R % 2 == 1:
print(nums.reverse()) #==> nums.reverse(); print(nums)
else:
print(nums)
참고
reverse
는 list 타입에서 제공하는 함수reversed
는 내장함수list 형태는
,
뒤에 한칸 띄우고 다음 값이 온다. 따라서 ','.join(리스트) 하여 합쳐진 문자열로 출력
출력형태가 [1,2,3,4] 형태인데, [1, 2, 3, 4] 형태로 출력된다.
if err:
print('error')
else:
if R % 2 == 1:
nums.reverse()
print(nums) #==> result = ','.join(nums); print('['+result+']')
list 대신 양방향 queue인 deque 사용
slicing -> pop, popleft
nums = nums.extend([arr[i] for i in range(1, len(arr)-1, 2)])
#==> nums.extend([arr[i] for i in range(1, len(arr)-1, 2)])
65 -> '6','5'
두자리 수 입력 시, 각각의 숫자를 하나로 인식하므로 int로 받기
arr = sys.stdin.readline().rstrip()
arr = arr.replace('[', '')
arr = arr.replace(']', '')
arr = list(map(int, arr.split(',')))
nums = deque()
# 수정 전: nums.extend([arr[i] for i in range(1, len(arr)-1, 2)])
nums.extend(arr)
빈 문자열이 들어올 경우 예외처리
arr = sys.stdin.readline().rstrip()
arr = arr.replace('[', '')
arr = arr.replace(']', '')
# 수정 전: arr = list(map(int, arr.split(',')))
if arr != '':
arr = list(map(int, arr.split(',')))
else:
arr = ''