소스 코드
def solution(board, moves):
answer = 0
n = len(board)
moves_n = len(moves)
# 뽑는 값들 저장
bucket = [-1 for _ in range(moves_n)]
# board 방문 확인
check = [[0 for _ in range(n)] for q in range(n)]
# bucket의 위치
# 중간에 -1 끼는거 방지하기 위함
bucket_idx = 0
for w in moves:
for e in range(n):
# 0이 아니고, 방문한적 없으면 뽑기
if board[e][w - 1] != 0 and check[e][w - 1] == 0:
check[e][w - 1] = 1
bucket[bucket_idx] = board[e][w - 1]
bucket_idx += 1
break
while True:
# 탈출 조건
temp = bucket[:]
# bucket[r]의 값과 bucket[r+1]의 값이 같으면
# -1끼리 터지는거 방지하기 위한 -1 조건
for r in range(len(bucket) - 1):
if bucket[r] == bucket[r + 1] and bucket[r] != -1:
answer += 2
del bucket[r:r+2]
break
if bucket == temp:
break
return answer
해결 방법
1. 뽑으면서 확인 X 다 뽑아놓고 한번에 확인 O
2. 이웃한 숫자가 같으면 해당 idx의 값들을 제거
(0이나 -1로 갱신하려고 했는데, 너무 복잡해지는 것같아서 + len(moves)의 최대 값이 1000이라 그냥 제거)
느낀 점
더 깔끔하게 만들 수 있는데...
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제풀이.프로그래머스' 카테고리의 다른 글
[프로그래머스 코딩] 신규 아이디 추천 - PYTHON (0) | 2021.07.28 |
---|---|
[프로그래머스 코딩] 키패드 누르기 - PYTHON (0) | 2021.07.28 |
[프로그래머스 코딩] 로또의 최고 순위와 최저 순위 - PYTHON (0) | 2021.07.27 |
[프로그래머스 코딩] 숫자 문자열과 영단어 - PYTHON (0) | 2021.07.26 |
[프로그래머스 코딩] 코딩테스트 연습 H-Index - PYTHON (0) | 2021.07.01 |