Coding Test/프로그래머스(Python)
[프로그래머스/Python] Level 3_표 편집
syunze
2024. 3. 27. 17:45
📌문제 유형
2021 카카오 채용연계형 인턴십
📌문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📌나의 문제풀이
- 정확성 모두 통과, 효율성 0
def move_UD(idx,d,answer):
dirs, num = d.split()
num = int(num)
rows_num = [n for n,state in answer.items() if state != 'X']
while True:
if dirs == 'U':
return rows_num[rows_num.index(idx) - num]
else:
return rows_num[rows_num.index(idx) + num]
def move_C(idx,answer):
# 현재 선택된 행 삭제
# 최근 삭제된 행도 기억해야 함
list_ = [n for n,state in answer.items() if state != 'X']
answer[idx] = 'X'
# 맨 끝인 경우, 바로 윗행 선택
if idx == list_[-1]:
return list_[-2], idx
# 맨 끝 아닌 경우, 바로 다음 행 선택
else:
return list_[list_.index(idx) + 1], idx
def move_Z(del_list, answer):
answer[del_list[-1]] = 'O'
def solution(n, k, cmd):
ans = ['O' for _ in range(n)]
table = [i for i in range(n)] # 초기 테이블 번호
answer = dict([(a,b) for a,b in zip(table,ans)])
del_ = []
now_idx, del_idx = k, -1 # 현재 위치, 최근 삭제한 위치
for com in cmd:
if com[0] == 'U' or com[0] == 'D':
now_idx = move_UD(now_idx,com,answer)
elif com[0] == 'C':
now_idx, del_idx = move_C(now_idx,answer)
del_.append(del_idx)
else:
move_Z(del_,answer)
del_ = del_[:-1]
# print(answer)
return ''.join(answer.values())
📌다른사람의 문제풀이
- Linked list 사용
[프로그래머스] 표 편집 - Python
🤔 문제 https://programmers.co.kr/learn/courses/30/lessons/81303 코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr
kjhoon0330.tistory.com
def solution(n, k, cmd):
cur = k
table = { i:[i - 1, i + 1] for i in range(n) }
answer = ['O'] * n
table[0] = [None, 1]
table[n - 1] = [n - 2, None]
stack = []
for c in cmd:
if c == "C":
# 삭제
answer[cur] = 'X'
prev, next = table[cur]
stack.append([prev, cur, next])
if next == None:
cur = table[cur][0]
else:
cur = table[cur][1]
if prev == None:
table[next][0] = None
elif next == None:
table[prev][1] = None
else:
table[prev][1] = next
table[next][0] = prev
elif c == "Z":
# 복구
prev, now, next = stack.pop()
answer[now] = 'O'
if prev == None:
table[next][0] = now
elif next == None:
table[prev][1] = now
else:
table[next][0] = now
table[prev][1] = now
else:
# 커서 이동
c1, c2 = c.split(' ')
c2 = int(c2)
if c1 == 'D':
for _ in range(c2):
cur = table[cur][1]
else:
for _ in range(c2):
cur = table[cur][0]
return ''.join(answer)
📌리뷰
- linked list 설명
[Python 자료구조] 연결리스트(Linked List) feat.LeetCode
연결리스트는 다른 추상 자료형(Abstract Data Type)을 구현할 때 기반이 되는 기초 선형 자료구조이다.각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장한다.
velog.io
728x90