백준 5430번: AC

ddongseop·2021년 7월 4일
0

Problem Solving

목록 보기
13/49

✔ 풀이를 위한 아이디어

  • 문자열(string)에서 필요한 요소 뽑아내기
  • 덱(deque)을 직접 구현하지 않고 index로 관리하기

✔ 코드

import sys

T = int(sys.stdin.readline())

for _ in range(T):
    command = sys.stdin.readline().strip()
    N = int(sys.stdin.readline())
    num_string = sys.stdin.readline().strip()
    
    nums = []
    tmp = 1
    for i in range(1, len(num_string)-1):
        if num_string[i+1] == ',' or num_string[i+1] == ']':
            nums.append(int(num_string[tmp:i+1]))
            tmp = i+2
    
    start = 0
    end = N-1
    reverse = 0
    error = 0
    for i in range(len(command)):
        if command[i] == 'R':
            reverse = 1 - reverse
        elif command[i] == 'D':
            if start > end:
                error = 1
                break
            if reverse == 0:
                start += 1
            elif reverse == 1:
                end -= 1

    if error:
        print("error")
    elif start > end:
        print("[]")
    elif reverse == 0:
        print("[{}".format(nums[start]), end="")
        for i in range(start+1, end+1):
            print(",{}".format(nums[i]), end="")
        print("]")
    elif reverse == 1:
        print("[{}".format(nums[end]), end="")
        for i in range(end-1, start-1, -1):
            print(",{}".format(nums[i]), end="")
        print("]")
  • [1,2,3,4]와 같은 형식의 입력값에서 숫자들을 추출해 배열로 만들어야하므로 for문을 돌며 경계값을 감지해 nums라는 배열에 추가해줬다.
  • start, end, reverse라는 세가지 변수를 활용해 nums에 있는 요소들을 직접 뒤집거나 삭제하지 않고 해당 기능을 수행하였다.
  • 배열 안에 있는 요소가 0개일 때나 1개일 때를 주의해서 처리해줘야 했다.

  • 배열 안에 있는 요소가 0개일 때나 1개일 때를 고려하지 않아서 한차례 틀렸다.
  • 이후에 완성된 코드는 for문이 꽤 많이 있었음에도 불구하고 Python3와 PyPy3에서 모두 정답으로 채점되었다.
  • 사실 이 문제는 휴가 갔다오기 전에 백준 푸는 연습이 덜 되었을 때 무작정 시도해봤던 경험이 있는데, 그때는 각 Case마다 출력하는 것이 아니라 한번에 출력하려고 하다보니 코드가 복잡해져서 런타임 에러를 잡아내지 못했다. 또한, 한줄한줄 낭비를 최소화하려는 습관이 안잡혀 있다보니 굉장히 난잡한 코드를 짰던 것 같다. 그 코드들은 차마 부끄러워서 여기엔 못올리겠다.
  • 그때 작성했던 코드와 지금 작성한 코드를 비교해보니 격리 기간 때 읽었던 책이 되게 도움이 됐다는 걸 느낀다.
    (동료들 뒷목잡게 만드는 나쁜 프로그래밍 습관: http://www.yes24.com/Product/Goods/89497188)

처음으로 풀어본 백준 골드 문제!

✔ 관련 개념

  • 프로그래밍 스킬..?

0개의 댓글