괜히 난이도가 높은 게 아닌 듯한 문제 자료구조를 정확하게 이해하고, 효율적으로 사용할 줄 아는지 체크하기 좋다.
처음 작성한 코드
t = int(input())
for _ in range(t):
p = input()
n = int(input())
li = list(map(int, input()[1:-1].replace(',', '')))
for p_i in p :
# R : 순서 뒤집기
if p_i == 'R':
li = sorted(li, reverse= True)
elif p_i == 'D':
if len(li) == 0 :
print('error')
else:
li.pop(0)
print(li)
문제 1. replace는 단순히 변환해주는 함수라서 그대로 문자열임. split은 리스트 반환.
문제 2. 만약 D 함수를 요청했는데 배열이 비어있으면 error를 출력해야하는 기능은 잘 구현했으나, error가 나면 더이상 for문에서 기능을 할 수 없으므로 break를 해줘야함.
문제 3. deque를 생각했음에도 불구하고 그냥 list로 짜버리기~!~!~!!~!
--> 그래서 큰 틀을 먼저 짜두고 그 안에 보충 기능을 생각하는 게 중요하다.
일단 코드를 먼저 작성하기보다 큰 틀을 필기를 먼저 해두는 게 여러모로 좋을 듯
문제 4. sorted와 reverse의 차이 이제 확실히 알게됐다!💡
최종코드
# R : 순서 뒤집기, D : 첫번째 수 버리기
from collections import deque
t = int(input())
for _ in range(t):
p = input()
n = int(input())
que = deque(input()[1:-1].split(','))
cnt = 0
if n == 0 : que = []
for p_i in p :
if p_i == 'R':
cnt += 1
elif p_i == 'D':
if len(que) == 0 :
print('error')
break
else:
if cnt % 2 == 0 :
que.popleft()
else:
que.pop()
else:
if cnt % 2 == 0 :
print('[' + ','.join(que) + ']')
else:
que.reverse()
print('[' + ','.join(que) + ']')
알게된 점
- deque의 reverse 메소드. 처음에 sorted로 구현했으나, sorted랑 reverse는 엄연히 다르다..!
- ⭐️reverse를 할 때 여러 번 해야하는 경우가 생긴다면, 홀수 번째에만 시행해주면 여러 번 한 것과 동일한 결과가 나타난다.⭐️
- 1 2 3 형식이 아닌 [1,2,3] 형식으로 입력될 때 어떻게 입력 받는가
- [:-1] 슬라이싱은 '처음부터 마지막 데이터를 제외한 -2까지의 값'를 의미
- split()함수는 list를 반환한다는 점 잊지말자.
깨달은 점
요즘 어려운 문제를 접하면서 가장 많이 느끼는 것은 독해력이 정말 중요하다는 것이다.
주어진 조건들을 다 조합해서 코드를 짜야하는데, 이때 문제를 잘 읽고 해석해서
1. 꼭 필요한 기능이 무엇인지 먼저 체크하고, 주기능을 위주로 큰틀을 구성.
2. 주기능을 보충하는 설명(보충 기능)들을 위주로 채워나가면서,
3. 입출력 조건에 맞게 코드를 구성한다.
보충 기능들을 어떻게 큰 틀 안에 효율적으로 구성해야 할 지가 가장 큰 고민이다,,
애초에 아예 풀이를 모르는 문제는 아는 게 없는 상태이므로 채워넣고 알아가면 되는데
큰 틀 안에서 보충 기능들을 효율적으로 구현하는 건, 알고있는 것들을 잘 조합해야 하는 거기 때문에,,!!
이걸 못하는 이유는 연습의 부족이라고 생각한다.
이제까지 자료구조와 알고리즘의 개념을 채웠다면(사실 알고리즘 개념도 열심히 해야함)
연습을 통해 배운 내용을 써먹을 수 있게 하자!
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/2852] NBA 농구 (0) | 2023.02.16 |
---|---|
[백준/6236] 용돈 관리 | 이진 탐색 트리 | 분할 | 파이썬 (0) | 2023.02.14 |
[백준/1021] 회전하는 큐 | python deque | dequed의 rotate() (0) | 2023.02.12 |
[백준/15821] 낚이고 낚아라 | 배열 2칸씩 묶기 _ range()의 활용 (2) | 2023.02.05 |
[백준/10819] 차이를 최대로 | 모든 순서를 고려한 배열.. permutation | 리스트 갱신법이 항상 효율적일까? (2) | 2023.01.31 |