문제 링크

문제 요약

주어진 거리 계획에서 주차 가능한 공간의 수를 계산하는 문제입니다.

‘D’ (차고), ‘B’ (버스 정류장), ‘S’ (횡단보도), ’-’ (빈 공간) 문자로 구성된 문자열이 주어집니다.

  1. 차고 (‘D’) 앞: ‘D’ 구간에는 주차할 수 없습니다.
  2. 버스 정류장 (‘B’): ‘B’ 구간은 물론, ‘B’ 구간으로부터 10미터 (2칸) 이전까지는 주차할 수 없습니다.
  3. 횡단보도 (‘S’): ‘S’ 구간은 물론, ‘S’ 구간으로부터 5미터 (1칸) 이전 및 이후까지는 주차할 수 없습니다.

주어진 n개의 거리 계획에 대해 각각 주차 가능한 공간의 수를 출력해야 합니다.

풀이

이 문제는 주어진 주차 규칙에 따라 각 구간이 주차 가능한지 여부를 확인하는 Implementation 문제입니다. 각 거리 계획 문자열을 순회하면서 각 구간(i)에 대해 다음 조건들을 확인하여 주차 가능 여부를 판단하면 됩니다.

  1. 기본 조건 확인:

    • 현재 구간 board[i]가 ‘D’, ‘B’, ‘S’ 중 하나라면, 이 구간 자체는 주차가 불가능합니다. 따라서 '-' (빈 공간)일 경우에만 다음 조건들을 확인합니다.
  2. 횡단보도 (‘S’) 규칙 적용:

    • board[i-1]이 ‘S’인 경우: 현재 구간 i는 ‘S’로부터 5미터 뒤에 위치하므로 주차 금지 구역입니다. (인덱스 i가 0보다 커야 함)
    • board[i+1]이 ‘S’인 경우: 현재 구간 i는 ‘S’로부터 5미터 앞에 위치하므로 주차 금지 구역입니다. (인덱스 ilen(board)-1보다 작아야 함)
  3. 버스 정류장 (‘B’) 규칙 적용:

    • board[i+1]이 ‘B’인 경우: 현재 구간 i는 ‘B’로부터 5미터 앞에 위치하므로 주차 금지 구역입니다. (인덱스 ilen(board)-1보다 작아야 함)
    • board[i+2]가 ‘B’인 경우: 현재 구간 i는 ‘B’로부터 10미터 앞에 위치하므로 주차 금지 구역입니다. (인덱스 ilen(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()
 

연관 페이지

참고 문헌 / 사이트