문제 링크
문제 요약
주어진 거리 계획에서 주차 가능한 공간의 수를 계산하는 문제입니다.
‘D’ (차고), ‘B’ (버스 정류장), ‘S’ (횡단보도), ’-’ (빈 공간) 문자로 구성된 문자열이 주어집니다.
- 차고 (‘D’) 앞: ‘D’ 구간에는 주차할 수 없습니다.
- 버스 정류장 (‘B’): ‘B’ 구간은 물론, ‘B’ 구간으로부터 10미터 (2칸) 이전까지는 주차할 수 없습니다.
- 횡단보도 (‘S’): ‘S’ 구간은 물론, ‘S’ 구간으로부터 5미터 (1칸) 이전 및 이후까지는 주차할 수 없습니다.
주어진 n개의 거리 계획에 대해 각각 주차 가능한 공간의 수를 출력해야 합니다.
풀이
이 문제는 주어진 주차 규칙에 따라 각 구간이 주차 가능한지 여부를 확인하는 Implementation 문제입니다.
각 거리 계획 문자열을 순회하면서 각 구간(i
)에 대해 다음 조건들을 확인하여 주차 가능 여부를 판단하면 됩니다.
-
기본 조건 확인:
- 현재 구간
board[i]
가 ‘D’, ‘B’, ‘S’ 중 하나라면, 이 구간 자체는 주차가 불가능합니다. 따라서'-'
(빈 공간)일 경우에만 다음 조건들을 확인합니다.
- 현재 구간
-
횡단보도 (‘S’) 규칙 적용:
board[i-1]
이 ‘S’인 경우: 현재 구간i
는 ‘S’로부터 5미터 뒤에 위치하므로 주차 금지 구역입니다. (인덱스i
가 0보다 커야 함)board[i+1]
이 ‘S’인 경우: 현재 구간i
는 ‘S’로부터 5미터 앞에 위치하므로 주차 금지 구역입니다. (인덱스i
가len(board)-1
보다 작아야 함)
-
버스 정류장 (‘B’) 규칙 적용:
board[i+1]
이 ‘B’인 경우: 현재 구간i
는 ‘B’로부터 5미터 앞에 위치하므로 주차 금지 구역입니다. (인덱스i
가len(board)-1
보다 작아야 함)board[i+2]
가 ‘B’인 경우: 현재 구간i
는 ‘B’로부터 10미터 앞에 위치하므로 주차 금지 구역입니다. (인덱스i
가len(board)-2
보다 작아야 함)
위 조건들을 모두 만족하지 않고 (즉, 위의 조건들에 해당하지 않고), 현재 구간 board[i]
가 '-'
일 경우에만 주차 가능한 공간으로 간주하여 개수를 증가시킵니다.
정답 코드
def solve():
n = int(input())
l = [input() for _ in range(n)]
ans = [0] * n
for idx in range(n):
board = l[idx]
for i in range(len(board)):
# 1. 현재 구간이 D, B, S인 경우 주차 불가
if board[i] in'DBS':
continue
# 2. 횡단보도 'S' 규칙 적용: 5미터 전후 주차 불가
# board[i-1] == 'S': 현재 위치 'i'는 'S'로부터 5미터 후
# board[i+1] == 'S': 현재 위치 'i'는 'S'로부터 5미터 전
if (i > 0 and board[i-1] == 'S') or (i < len(board)-1 and board[i+1] == 'S'):
continue
# 3. 버스 정류장 'B' 규칙 적용: 10미터 전까지 주차 불가
# board[i+1] == 'B': 현재 위치 'i'는 'B'로부터 5미터 전
# board[i+2] == 'B': 현재 위치 'i'는 'B'로부터 10미터 전
if (i + 2 < len(board) and board[i+2] == 'B') or (i + 1 < len(board) and board[i+1] == 'B'):
continue
# 모든 조건을 통과하면 주차 가능
ans[idx] += 1
print(*ans)
if __name__ == "__main__":
tc = 1
for t in range(1, tc+1):
ret = solve()