Coding Test/백준(Python)

[백준/Python] 5430번(구현)_AC

syunze 2024. 2. 10. 17:43

📌문제 유형

구현, 자료구조 (골드 Lv.5)

 

📌문제

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

 

📌나의 문제풀이

- 1차(시간초과) : arr_len == 0과 R,D와의 관계 해결 + continue를 break로 작성

from collections import deque

t = int(input())

for _ in range(t):
    action = list(map(str,input()))
    arr_len = int(input())
    arr = input()
	
    # t만큼 반복 -> break 아닌 continue
    # arr_len 0인데 R로만 이루어짐 -> [] 출력
    if arr_len == 0 and 'D' in action:
        print('error')
        continue
    elif arr_len == 0 and 'D' not in action:
        print('[]')
        continue

    arr = list(map(int,arr[1:-1].split(',')))
    arr = deque(arr)

    # action 순서대로 수행
    flag = 0
    for act in action:
        if act == 'R':
            arr.reverse()
        elif act == 'D':
            if len(arr) < 1:
                flag = 1
                break
            else:
                arr.popleft()
    
    if flag == 1:
        print('error')
    else:
        print(str(list(arr)).replace(" ",""))

    # print()

 

- 2차(정답) : reverse()를 번번히 적용하면 시간초과

-> R 개수 만큼 다르게 적용하여 해결

import sys
from collections import deque

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

for _ in range(t):
    action = list(map(str,sys.stdin.readline()))
    arr_len = int(sys.stdin.readline().strip())
    arr = sys.stdin.readline().strip()

    if arr_len == 0 and 'D' in action:
        print('error')
        continue
    elif arr_len == 0 and 'D' not in action:
        print('[]')
        continue

    arr = list(map(int,arr[1:-1].split(',')))
    arr = deque(arr)
    r_cnt = 0

    # action 순서대로 수행
    flag = 0
    for act in action:
        if act == 'R':
            r_cnt += 1
        elif act == 'D':
            if len(arr) < 1:
                flag = 1
                break
            else:
                if r_cnt % 2 == 0:
                    arr.popleft()
                else:
                    arr.pop()
    
    if flag == 1:
        print('error')
    else:
        if r_cnt % 2 == 0:
            print(str(list(arr)).replace(" ",""))
        else:
            arr.reverse()
            print(str(list(arr)).replace(" ",""))

    # print()

 

📌다른사람의 문제풀이

 

[백준] 5430번 AC (Python 파이썬)

www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제 설명

hongcoding.tistory.com

 

📌리뷰

- 문제가 쉬운데 정답률 20%여서 무엇인가 했더니 자잘한 조건들로 걸렸다.

  • arr_len == 0과 R,D일 경우 다르게 적용
  • reverse() 매번 적용하면 시간초과 -> reverse() 짝,홀수로 횟수 줄이기
728x90