[프로그래머스 level1] 크레인 인형뽑기 게임

IT공부중·2020년 4월 8일
0

알고리즘

목록 보기
9/49

https://programmers.co.kr/learn/courses/30/lessons/64061

def solution(board, moves):
    answer = 0
    box = []
    for move in moves:
        for doll in board :
            if(doll[move-1] != 0):
                box.append(doll[move-1])
                doll[move-1] = 0
                break
        if(len(box) >= 2):
            if(box[len(box) -1] == box[len(box) -2]):
                box.pop()
                box.pop()
                answer +=2
    return answer

처음 푼 풀이는 moves만큼 for문을 돌고 board의 배열들을 도는데 그 안의 move-1 값이 0 이 아니면 box에 넣는 것이었다. 그리고 마지막 것과 마지막 전 것이 같으면 둘다 pop으로 빼내고 답에 2를 더했다.

이번에 푼 풀이는 풀이가 더 길어졌다. 예전에 시험 칠 때랑 생각이 달라졌나보다.

def solution(board, moves):
    changeList = changeXY(board)
    resultList = []
    answer = 0
    for value in moves:
        if len(changeList[value-1]) != 0:
            if len(resultList) == 0:
                resultList.append(changeList[value-1].pop(0))
            else:
                doll = changeList[value-1].pop(0)
                if doll ==  resultList[len(resultList)-1]:
                    resultList.pop()
                    answer += 2       
                else:
                    resultList.append(doll)    

    return answer

def changeXY(board):
    changeList = [[] for _ in range(len(board))]
    for i in range(len(board)):
        for j in range(len(board[i])):
            if(board[i][j] != 0):
                changeList[j].append(board[i][j])
    return changeList

changeXY 함수를 만들어서 board의 x y 좌표를 바꾸어 주었다. 그래서 changeList의 1번째에는 첫번째줄 인형만 두번째에는 두번째줄 인형만... 이렇게 바꾸었다. 0일 때는 안 넣었기 때문에 0검사는 안 해도 된다. 대신에 len 검사를 해주어야함.
moves 만큼 도는데 changeList 리스트가 빈 리스트가 아닐 때 따로 나누어서 검사를 했다. doll을 담아두는 result가 비워있으면 그냥 넣고 차있으면 마지막 것과 검사해서 같으면 빼내고 다르면 그냥 넣게 만들었다.

profile
4년차 프론트엔드 개발자 문건우입니다.

0개의 댓글