D2
Problem
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
Solution
1. 1번부터 1000번까지 버스정류장이 정해져 있으므로 버스정류장 리스트를 만들어 운용하자
2. 일반, 급행, 광역 버스 별 조건이 나눠져있지만, 결과적으로 지나가는 곳을 체크한 후 최댓값을 구하면 된다.
3. 조건을 확인하자.
- 일반버스: 모두 지나감
- 급행버스: 시작이 짝수/홀수 에 따라 짝수/홀수 번만 지나간다.
- 광역버스:
- 홀수: 3의 배수이면서 10배수가 아닌 곳
- 짝수: 4의 배수인 곳
- 단, 시작점과 끝점은 반드시 포함된다! 따라서 시작과 끝점 조건을 달아주자.
Code
for test_case in range(1, int(input())+1):
N = int(input()) # 노선 수
bus_stop = [0] * 1001
for _ in range(N): # 입력과 동시에 처리
t, start, end = map(int, input().split())
if t == 1: # 일반 버스
for i in range(start, end+1):
bus_stop[i] += 1
elif t == 2: # 급행 버스
if start % 2 and not end % 2: # B정류장이 포함 안 되는 경우 포함시키기
bus_stop[end] += 1
elif not start % 2 and end % 2:
bus_stop[end] += 1
for i in range(start, end+1, 2): # 홀수, 짝수 모두 2씩 커지면 됨
bus_stop[i] += 1
elif t == 3: # 광역버스
if start % 2: # A가 홀수인 경우
for i in range(start, end+1):
if not i % 3 and i % 10:
bus_stop[i] += 1
if end % 3 or not end % 10: # B가 포함되지 않은 경우 포함시키기
bus_stop[end] += 1
else: # A가 짝수인 경우
for i in range(start, end+1):
if not i % 4:
bus_stop[i] += 1
if end % 4: # B가 포함되지 않은 경우 포함시키기
bus_stop[end] += 1
print(f'#{test_case} {max(bus_stop)}')
<부족한 부분은 댓글로 남겨주시면 저에게 큰 힘이 됩니다!>
반응형
'Algorithm > SW Expert Academy Review' 카테고리의 다른 글
5249. 최소 신장 트리 (0) | 2024.02.19 |
---|---|
2607. 비슷한 단어 (0) | 2024.01.20 |
4613. 러시아 국기 같은 깃발 (0) | 2023.03.06 |
1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2023.03.06 |
1954. 달팽이 숫자 (0) | 2023.03.06 |