[Python] SWEA 6485: 삼성시의 버스 노선
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
처음에 문제를 접했을 때는 5000까지의 리스트를 버스 개수만큼 만들고(tmp) 만일 버스가 정류장을 경유한다면 값을 1로 바꿔준 후, 각 리스트들을 더해 결과를 도출하려고 했다.
1차 시도
더보기
T = int(input())
for tc in range(1, T+1):
N = int(input())
new = []
for n in range(1,N+1):
A,B = map(int, input().split())
tmp = [0]*5001
for i in range(A-1,B):
tmp[i] = 1
new.append(tmp)
#new는 list의 list 형태
ans = [x+y for x,y in zip(new[0], new[1])] #필수. #정류장을 들리는 버스의 수를 뽑아냄. A와 B 노선만 다니기 대문에 new에는 두 개의 원소만 존재하고 zip을 사용할 수 있다.
P= int(input())
res = []
for p in range(P):
C = int(input())
res.append((ans[C-1]))
print(f'#{tc}', *res, sep=' ')
시간이 꽤나 걸리긴 했지만 어쨌거나 주어진 TC랑도 잘 맞아 떨어져서 풀었군... 싶었지만 fail이 떴고 다시 한 번 짚어보니 TC의 경우 노선이 두 개지만 n개의 노선이 생길 수 있다는 것을 고려하지 못했다. 중간에 주석을 보면 그냥 문제를 잘못 접근한 거 같다는 생각도 적지않게 든다................... TC만 보고 납작하게 문제를 안 봐야 할텐데
2차 시도
더보기
T = int(input())
for tc in range(1, T+1):
N = int(input())
new = []
for n in range(1,N+1):
A,B = map(int, input().split())
tmp = [0]*5001
for i in range(A-1,B):
tmp[i] = 1
print(tmp)
new.append(tmp)
#new는 list의 list 형태
for i in range(1, len(new)):
new = [x+y for x,y in zip(new[0], new[i])]
ans = new
P= int(input())
res = []
for p in range(P):
C = int(input())
res.append((ans[C-1]))
print(f'#{tc}', *res, sep=' ')
그래서 ans를 구하는 부분을 for문을 넣어서 더해주는 방법으로 수정했고 이제는 정말 다 풀었군 싶었지만...! 지독한 런타임 에러에 걸렸다
ANS
T = int(input())
for tc in range(1, T+1):
N = int(input())
new = []
cnt = [0]*5001
for n in range(N):
S,E = map(int, input().split())
for i in range(S, E+1):
cnt[i] += 1
P = int(input())
lst = []
for k in range(P):
p = int(input())
lst.append(cnt[p])
print(f'#{tc}', *lst)
풀이 방식을 바꿔서 cnt 이용해서 접근하니 수월한 문제.
'알고리즘 > SWEA' 카테고리의 다른 글
| [Python] SWEA 5209: 최소 생산 비용 (0) | 2023.03.29 |
|---|---|
| [Python] SWEA 1240 : 단순 2진 암호코드 (0) | 2023.02.27 |
| [Python] SWEA 1226: 미로1 (0) | 2023.02.21 |
| [Python] SWEA 4871: 그래프 경로 (0) | 2023.02.14 |
| [Python] SWEA 1859: 백만 장자 프로젝트 (0) | 2023.02.06 |
TAGS.
