[BOJ] 2979. 트럭 주차

Jimeaning·2023년 4월 10일
0

코딩테스트

목록 보기
66/143

Python3

문제

입출력

입출력 예시

키워드

  • 구현
  • 카운팅배열

주요 포인트

트럭 개수에 따른 요금인 a, b, c를 입력 받는다

입력으로 주어지는 시간은 1부터 100까지 이므로 arr 리스트에 100개의 0을 초기화 시킨다.

반복문 (3번 반복)
들어 온 시간과 나간 시간을 입력 받는다.
이중 반복문
들어 온 시간 ~ 나간 시간까지 arr 리스트에 1씩 증가시킨다.
문제 1번 예시처럼
1 6
3 5
2 8
이 들어 왔다고 가정하면,
시간 : 1 2 3 4 5 6 7 8
arr : 1 2 3 3 3 2 1 1
이렇게 들어갈 것이다.

반복문 (arr리스트)
만약 자동차가 한 대라면, ans에 ans + a한 값을 넣는다.
만약 자동차가 두 대라면, ans에 ans + 2xb한 값을 넣는다.
만약 자동차가 세 대라면, ans에 ans + 3xc한 값을 넣는다.

ans를 최종 출력한다.

최종 코드

a, b, c = map(int, input().split())
arr = [0] * 100
ans = 0

for i in range(3):
    arv, lft = map(int, input().split())
    
    for j in range(arv, lft):
        arr[j] += 1
    
for i in arr:
    if i == 1: ans += a
    elif i == 2: ans += 2*b
    elif i == 3: ans += 3*c
    
print(ans)

+23/5/17 추가

a, b, c = list(map(int, input().split()))

time = [0 for _ in range(101)]
total = 0

for _ in range(3) :
    arr, lft = list(map(int, input().split()))
    
    for i in range(arr, lft) :
        time[i] += 1

for i in time :
    if i != 0 :
        if i == 1 : total += a
        elif i == 2 : total += 2 * b
        elif i == 3 : total += 3 * c
        
print(total)

여러 시도를 해봤는데 40ms가 가장 적게 걸리는 것 같다.
먼저 time 배열의 크기가 100이상인데, 모두 사용하지는 않기 때문에 반복문에서 0이 아닌 것들만 체크해주었다.
그리고 트럭이 한 대일 때, 두 대일 때, 세 대일 때를 의미하는 변수를 만들었으나, 굳이 세 개의 변수를 선언할 필요가 없다.
이 문제에서는 최종 주차값 계산할 때 한 번만 쓰기 때문에 변수를 없애고 total 값에 바로 더해주는 방식으로 바꿨다.

피드백

반복문을 총 3번 써야 하는 문제였다. 처음에 문제가 잘 이해 안 가서 마지막 ans를 계산하는 부분이 헷갈렸다.

profile
I mean

0개의 댓글