땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • E
  • D
  • ㅗ
  • 이것이 리눅스다 with Rocky Linux9
  • I

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

백준 5430 AC(Queue)
Algorithm/Algorithm Problem

백준 5430 AC(Queue)

2022. 5. 6. 15:13

https://www.acmicpc.net/problem/5430

 

5430번: AC

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

www.acmicpc.net

문제는 간단하다. 주어진 배열에서 R이면 reverse(), D면 pop()을 시키면 되는 문제였다.

 

주요 요점은 어떤 자료구조를 사용하냐는 건데 함수p와 n의 범위가 100,000이기 때문에

list로 접근하면 안된다는걸 바로 알아차렸다.

따라서 queue로 접근하면 pop에 대한 시간복잡도는 O(1)이기 때문에 queue()로 선택했다.

 

여기서 가장 시간을 많이 잡아먹는 연산은 당연히 reverse()이다.

그래서 R을 만날때마다 reverse()를 하지말고 RR이 만나면 없던일처럼 되니까 RR만 고려를 해줬더니 시간초과가 났다.

 

생각해보니까 RDRD이런형식이면 reverse()을 계속 해줘야되기 때문에 비효율적이라는걸 알았다.

queue는 left, right 모두 pop이 가능한 자료구조이고 만약 R이 홀수만큼 나왔다면 reverse()를 시켰을테니까 queue.pop(), 짝수면 queue.popleft() 이런 방식으로 생각했다.

from collections import deque
import sys


t = int(input())
for _ in range(t):
    data = sys.stdin.readline().rstrip()
    n = int(input())
    arr = deque(sys.stdin.readline().rstrip()[1:-1].split(','))
    
    if n == 0:
        arr = deque()

    R_cnt = 0

    for i in data:
        if i == 'R':
            R_cnt += 1
        elif i == 'D':
            try:
                if R_cnt % 2:
                    arr.pop()
                else:
                    arr.popleft()
            except:
                print('error')
                break
    else:
        if R_cnt % 2:
            arr.reverse()
            print('[' + ','.join(arr) + ']')
        else:
            print('[' + ','.join(arr) + ']')

 

 

p.s : 출력결과 형식을 맞추기위한 문자열 다루기가 좀 부족한 것 같음. join() 활용을 잘해보자

'Algorithm > Algorithm Problem' 카테고리의 다른 글

백준 9019 DSLR(시간복잡도, BFS)  (0) 2022.05.06
백준 7569 토마토(3차원배열, BFS)  (0) 2022.05.06
백준 1107 리모콘(Brute-Force)  (0) 2022.05.04
백준 11403 경로찾기(DFS,BFS, Floyd-Warshall)  (0) 2022.05.04
프로그래머스 양궁대회(시뮬레이션, 그리디)  (0) 2022.04.14
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 9019 DSLR(시간복잡도, BFS)
    • 백준 7569 토마토(3차원배열, BFS)
    • 백준 1107 리모콘(Brute-Force)
    • 백준 11403 경로찾기(DFS,BFS, Floyd-Warshall)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바