본문 바로가기
코딩테스트 문제풀이/beakjoon

[백준] 5430 AC

by merona99 2022. 8. 12.
반응형

백준 5430번 AC

구현 / 자료구조 / 문자열 / 파싱 / 큐

 

 

[문제]

 

 

[과정]

 

골드치고 많이 쉬운 문제다 싶었는데 시간초과출력형식이 잘못되서 계속 오류가 났던.. 문제

 

※ 기본 로직

1) 데큐에 형식에 맞도록 변형해서 숫자 데이터를 넣어 줌 (리스트 입력 -> deque() 형변환)

빈 배열이 들어올 경우 인덱싱을 할 시에 오류가 나므로 예외처리

대체 왜 입력을 저렇게 리스트로 주는거지.. 그냥 전처럼 숫자를 주지

이게 젤 까다로움.. ㅡㅡ

 

2) R이 나온 경우 저장

이 부분에서 그냥 R일 경우 reverse()를 사용하게 되면 시간초과가 발생

(나의 첫번째 경우)

따라서 R이 나온 횟수를 저장하고 R의 횟수를 저장한 변수의 홀짝 여부를 판단q에서 데이터를 앞에서 뺄건지 뒤에서 뺄건지 정하면 가능

 

3) D가 나온 경우

error가 안나게 되는 경우는 cnt를 0,1로 구분해서 판별하고 error 출력시 cnt를 0(초기값)에서 1로 바꿔 마지막 출력문이 나오지 않도록 함

 

4) 배열 뒤집기

구해놓았던 r_cnt 변수가 짝수일경우 한번 뒤집어 줌

 

참고로 이거 안해줘서 또 시간초과가 발생함

 

 

※ 주의!!

나의 경우 출력할때 리스트 그대로 출력해서 계속 33%에서  '틀렸습니다'.가 떳음

str로 변환후 출력해야 옳바르게 인식해서 통과한다는 점 

 

 

[소스코드]

 

# 5430 AC

from collections import deque
import sys
input = sys.stdin.readline

for i in range(int(input())):
    arr = input().rstrip()
    n = int(input())
    num = input().rstrip()
    if num != '[]':
        q = deque(map(int, num[1:len(num)-1].split(',')))
    else: q = deque()
    
    cnt = 0
    r_cnt = 0   # R이 나온 횟수
    for a in arr:
        if a == 'R': 
             r_cnt += 1
        else:
            if len(q) == 0:
                print('error')
                cnt = 1
                break
            else:
                if r_cnt %2 == 0:
                    q.popleft()
                else: q.pop()
    if r_cnt % 2 == 1:
        q.reverse()
    if cnt == 0:
        print("[" + ','.join(map(str, q)) + "]")
    cnt = 0

 


 

[통과]

 

// 출력문이 리스트로 나와서 계속 33%에서 '틀렸습니다'가 떳다...

반응형

'코딩테스트 문제풀이 > beakjoon' 카테고리의 다른 글

[백준] 7795 먹을 것인가 먹힐 것인가  (0) 2022.08.19
[백준] 2910 빈도 정렬  (0) 2022.08.18
[백준] 1021 회전하는 큐  (0) 2022.08.12
[백준] 10866 덱  (0) 2022.08.12
[백준] 14503 로봇 청소기  (0) 2022.08.12

댓글