Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 언리얼뮤지컬
- 디자드
- 마인크래프트뮤지컬
- 정글사관학교
- 알고풀자
- 프린세스메이커
- Jinja2
- Unseen
- 데이터베이스
- EnhancedInput
- R
- 언리얼프로그래머
- flask
- Enhanced Input System
- node
- VUE
- 레베카
- 스터디
- Express
- 스마일게이트
- Ajax
- 프메
- 게임개발
- 언리얼
- 으
- 미니프로젝트
- JWT
- 카렌
- Bootstrap4
- 파이썬서버
Archives
- Today
- Total
Showing
[SWEA][파이썬] 전기버스 본문
소요시간 : 30분 이상
어려웠던 점: 오답 테스트케이스 2개를 잡을 수 없어서 포기하려다가 기존에 배터리가 있는 정류장에서 다음 배터리 정류장까지 남은 step이 충분하면 바로 continue 했는데 다시 살펴보니 현재 step 소비하는 로직을 적용하지 않았던 것이 문제였으므로 rest_step -= 1 를 추가해서 통과
아쉬운 점: 케이스 별로 하드코딩을 한 셈이여서 코드라인을 줄이고 최적화할 수 있는 로직이 따로 있는지 궁금하였다.
테스트 케이스 2개 오답 풀이
# 테스트 케이스 2개 실패
#만약 충전기 설치가 잘못되어 종점에 도착할 수 없는 경우는 0
i = int(input())
for k in range(i):
move_max, dest, battery_nums = map(int, input().split())
battery_num = list(map(int, input().split()))
battery_rnum = battery_num[::-1]
rest_step = move_max
answer = 0
isFail = False
for j in range(1, dest+1):
if rest_step <= 0:
isFail = True
break
if len(battery_rnum) == 0 and dest - j > rest_step:
isFail = True
break
if battery_rnum and battery_rnum[-1] == j:
# 다음 배터리 정류장까지 갈 수 있는 배터리가 충분하다면 충전하지 않아도 된다.
battery_rnum.pop()
if dest - j < rest_step:
continue
if len(battery_rnum) > 0 and battery_rnum[-1]-j < rest_step:
continue
rest_step = move_max
answer += 1
continue
rest_step -= 1
if not isFail and rest_step < 0:
print(f'#{k+1} {answer}')
else:
print(f'#{k + 1} {0}')
all pass 풀이
# 테스트 케이스 만점
#만약 충전기 설치가 잘못되어 종점에 도착할 수 없는 경우는 0
i = int(input())
for k in range(i):
move_max, dest, battery_nums = map(int, input().split())
battery_num = list(map(int, input().split()))
battery_rnum = battery_num[::-1]
rest_step = move_max
answer = 0
isFail = False
for j in range(1, dest+1):
if rest_step <= 0:
isFail = True
break
if len(battery_rnum) == 0 and dest - j > rest_step:
isFail = True
break
if dest - j < rest_step:
rest_step -= 1
continue
if battery_rnum and battery_rnum[-1] == j:
# 다음 배터리 정류장까지 갈 수 있는 배터리가 충분하다면 충전하지 않아도 된다.
battery_rnum.pop()
if len(battery_rnum) > 0 and battery_rnum[-1]-j < rest_step:
rest_step -= 1
continue
rest_step = move_max
answer += 1
continue
rest_step -= 1
if not isFail:
print(f'#{k+1} {answer}')
else:
print(f'#{k + 1} {0}')
아래 코드도 통과가능하다고 하여서 분석해봐야 겠다.
for tc in range(1, int(input()) + 1):
k, n, m = map(int, input().split())
chargers = set(map(int, input().split()))
bus = k # 먼저 k만큼 앞으로 이동시켜봅니다.
cnt = 0
while bus < n: # 목적지에 도착할 때까지
for i in range(k):
tmp = bus - i # 한 칸씩 뒤로 이동시키며
if tmp in chargers: # 해당 범위에 충전소가 있다면
cnt += 1 # 카운트하고
bus = tmp # 다음 버스 위치
break
else: # 범위 내에 충전소가 없다면
cnt = 0 # 목적지 도착 불가
break
bus += k # k만큼 앞으로 이동시키고 위 과정 반복
print(f"#{tc} {cnt}")
'컴퓨터 공학, 전산학 > 알고리즘' 카테고리의 다른 글
[DFS, python] 연속된 1의 개수 세기 (2) | 2023.12.21 |
---|---|
[SWEA][파이썬] 회문, 파이썬에서 2차원 배열 deepcopy, .strip()을 통한 ValueError: invalid literal for int() with base 10 해결 (1) | 2023.12.03 |
[Python] 백준 빗물 14719 - Monotonic stack (0) | 2023.04.11 |
[Python] 백준 철로(13334) 문제 해결 과정 (투포인터에서 우선순위 큐) (0) | 2023.03.15 |
[Python] 분할정복, 나머지 모듈러연산(합동식) 활용한 백준 1629번(곱셈) 문제 풀이 (0) | 2023.03.13 |