일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- data science
- 715. Range Module
- Protocol
- Class
- 43. Multiply Strings
- 프로그래머스
- iterator
- Decorator
- Generator
- Python Code
- Python Implementation
- Python
- Convert Sorted List to Binary Search Tree
- 밴픽
- t1
- 운영체제
- DWG
- 109. Convert Sorted List to Binary Search Tree
- Regular Expression
- 30. Substring with Concatenation of All Words
- Substring with Concatenation of All Words
- LeetCode
- shiba
- attribute
- 파이썬
- kaggle
- 컴퓨터의 구조
- 시바견
- 315. Count of Smaller Numbers After Self
- concurrency
Archives
- Today
- Total
Scribbling
프로그래머스: 방의 개수 본문
난이도가 꽤 높은 그래프 문제이다.
방이 만들어지는 조건을 따져야 한다.
* 방이 만들어지는 조건
- 재방문한 점이다.
- 타고온 edge는 첫 방문이다.
여기까지는 생각하기 쉬운데, 문제는 아래와 같은 케이스다.
현재 알고리즘은 위의 그림에 대해 방을 1개로 파악한다.
이는 가운데 교차점을 정점으로 생각하지 않기 때문이다.
이 문제를 해결할 방법은 여러가지인데, 가장 간단한 방법은 하나의 화살표에 대해 이동을 2번 반복하는 것이다.
def solution(arrows):
answer = 0
dx = (0, 1, 1, 1, 0, -1, -1, -1)
dy = (-1, -1, 0, 1, 1, 1, 0, -1)
vertex = set()
vertex.add((0, 0))
edge = set()
cur = [0, 0]
for arrow in arrows:
for t in range(2):
nxt = (cur[0]+dy[arrow], cur[1]+dx[arrow])
e1 = (cur[0], cur[1], nxt[0], nxt[1])
e2 = (nxt[0], nxt[1], cur[0], cur[1])
if nxt not in vertex:
vertex.add(nxt)
edge.add(e1)
edge.add(e2)
else:
if e1 not in edge:
edge.add(e1)
edge.add(e2)
answer += 1
cur = [nxt[0], nxt[1]]
return answer
'Computer Science > Coding Test' 카테고리의 다른 글
프로그래머스: 오픈채팅방 (0) | 2021.11.08 |
---|---|
LeetCode: 128. Longest Consecutive Sequence (0) | 2021.11.08 |
LeetCode: 127. Word Ladder (0) | 2021.11.07 |
프로그래머스: 가장 먼 노드 (0) | 2021.11.05 |
LeetCode: 124. Binary Tree Maximum Path Sum (0) | 2021.11.04 |