728x90
https://school.programmers.co.kr/learn/courses/30/lessons/64061
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
카카오 문제들은 상당히 복잡했는데, 그림을 보면 알 수 있듯이 스택을 사용하라는 것을 강조했기 때문에 스택에 맞게 풀었다.
이중 for문을 통해서 문제를 어렵지 않게 풀었다.
def solution(board, moves):
answer = 0
stack = [] # 바구니
# 순서대로 크레인의 움직임 위치를 받는다.
# 이차원 배열이라 이중 for 문 사용
for i in moves:
for j in range(len(board)):
if board[j][i-1] == 0:
continue
else:
stack.append(board[j][i-1])
board[j][i-1] = 0
# 인형이 두 개 이상일 경우에만 조건문 사용 >> 나름 연산 줄이려는 노력
if len(stack) > 1:
# 끝에 있는 두개가 동일하면 둘 다 제거
if stack[-1] == stack[-2]:
stack.pop(-1)
stack.pop(-1)
answer += 2
break
return answer
# 1.42ms
그치만 코드가 뭔가 아쉽다고 느낀 마음에 이중 for문을 없애는 것을 시도했다.
def solution(board, moves):
answer = 0
stack = []
for move in moves:
for row in board:
doll = row[move - 1]
if doll:
if stack and stack[-1] == doll:
stack.pop()
answer += 2
else:
stack.append(doll)
row[move - 1] = 0
break
return answer
# 0.77ms
간소화 과정
- 인형이 2개 이상일 경우에만 제거하려는 것이 연산을 줄이고자 하는 노력이었는데, 다시 보니 그 과정 결국 연산이었기 때문에 그냥 없애버렸다.
- for row in board로 수정하여 range(len(board))로 인덱싱하는 과정을 없앴다.
- doll이 0인지 확인하는 로직이 겹쳐져 있어서 하나로 통합하였다.
'cording test' 카테고리의 다른 글
[Python] 프로그래머스 Lv.1 실패율 (0) | 2024.03.16 |
---|---|
[Python] 프로그래머스 Lv.2 뒤에 있는 큰 수 찾기 (1) | 2024.03.12 |
백준 4949. 균형잡힌 세상(Python) (0) | 2023.11.09 |
Lv.1 바탕화면 정리 (0) | 2023.07.14 |
Lv.2 n-queens (2) | 2023.06.07 |