bit가 눈 앞에서 왔다갔다

Py) 프로그래머스 49190 방의 개수 본문

Algorithm/Prob

Py) 프로그래머스 49190 방의 개수

헬린인형 2022. 2. 22. 00:58

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

 

코딩테스트 연습 - 방의 개수

[6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 1, 6, 5, 5, 3, 6, 0] 3

programmers.co.kr

 

*틀린 코드

def solution(arrows):
    answer = 0
    coordinate = set()    # 지나간 좌표 확인용
    loc = [0,0]  # x, y  

    for direc in arrows:
        loc=list(loc)
        if direc == 0:
            loc[1] += 1
        elif direc == 1:
            loc[0] += 1
            loc[1] += 1
        elif direc == 2:
            loc[0] += 1
        elif direc == 3:
            loc[0] += 1
            loc[1] -= 1
        elif direc == 4:
            loc[1] -= 1
        elif direc == 5:
            loc[0] -= 1
            loc[1] -= 1
        elif direc == 6:
            loc[0] -= 1
        else:
            loc[0]-=1
            loc[1]+=1
        loc = tuple(loc)
        if loc in coordinate:
            answer += 1

        coordinate.add(loc)

    return answer

print(solution([6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 1, 6, 5, 5, 3, 6, 0]))

 

*정답 코드

from collections import defaultdict, deque

def solution(arrows):
    answer = 0

    visit = defaultdict(int)        # 방문확인
    visit_loc = defaultdict(int)    # 노드 확인
    directions = [(0,1), (1,1), (1,0), (1,-1), (0,-1), (-1,-1), (-1,0), (-1,1)]

    loc = (0,0)
    deq = deque([loc])      # 현 위치

    for direc in arrows:
        for _ in range(2):
            next = (loc[0]+directions[direc][0], loc[1]+directions[direc][1])
            deq.append(next)
            loc = next

    now = deq.popleft()
    room = 0
    visit[now] = 1

    while deq:
        next = deq.popleft()
        if visit[next] == 1:
            if visit_loc[(next, now)] == 0:
                room += 1
        else:
            visit[next] = 1
        visit_loc[(now, next)] = 1
        visit_loc[(next,now)] = 1
        now = next

    answer = room

    return answer

print(solution([6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 1, 6, 5, 5, 3, 6, 0]))

 

*

집합 자료형은 인덱스로 접근이 불가하다.

리스트 형식의 원소는 가질 수 없음 ex) dic.add([1,1])

{}라고 선언해주면 add가 안되는데 set()라고 선언해주면 됨

 

 

#

프로그래머스 연습문제를 다 풀었다.

다시 풀려고 일부러 코드 제출 안 해놓은 애들 3개만 하면 완성됨~

공부를 어떻게 해야 하는 고민 + 나 왜 이렇게 못함ㅠ 하는 자책도 있었지만 어찌어찌 다 풀었다.

크흡.. 수고했다 나 자신..

 

반응형
Comments