반응형
멀리 뛰기
문제 설명
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.
제한 사항
- n은 1 이상, 2000 이하인 정수입니다.
입출력 예
n result 4 5 3 3 # 입출력 예 설명 ## 입출력 예 #1 위에서 설명한 내용과 같습니다.
입출력 예 #2
(2칸, 1칸)
(1칸, 2칸)
(1칸, 1칸, 1칸)
총 3가지 방법으로 멀리 뛸 수 있습니다.
문제 풀이
# routes배열을 진출순서대로 오름차순으로 정렬한다.
# 현재 카메라 설치위치를 나타내는 변수를 선언하고 값은 -30001로 설정한다.
# routes값을 for문으로 하나씩 탐색한다.
# 만약 진입구간이 현재 카메라의 설치구간보다 작으면, 그냥 다음 값으로 넘어간다.
# 아니라면, answer에 1을 더하고, 현재 카메라의 위치를 현재 종점위치로 갱신한다
def solution(routes):
answer = 0
sorted_list = sorted(routes, key=lambda x: x[0])
check_num = -30001
print(sorted_list)
for i in range(len(sorted_list)):
print(sorted_list[i][0])
if sorted_list[i][0] > check_num: # 다음 인덱스가 check_num보다 클 때
print("1", sorted_list[i][0], check_num)
check_num = sorted_list[i][1]
answer += 1
elif sorted_list[i][0] <= check_num:
if sorted_list[i][1] < check_num:
check_num = sorted_list[i][1]
else:
# print("2",sorted_list[i][0], check_num)
continue
return answer
문제 해석
카메라를 체크를 하려면 도입부분에 카메라를 놓는 것보다 나가는 부분에 카메라를 놓는 것이 더 효율적입니다. 이를 구현하기 위해 0번째 인덱스를 기준으로 정렬을 진행합니다. 이후 다음 인덱스가 check_num보다 클 경우에만 카메라를 설치합니다. 카메라 구간 안에 카메라 구간이 속해 있을 경우에는 안쪽에 있는 카메라 나가는 부분을 check_num으로 설정합니다.
'Algorithm > programmers' 카테고리의 다른 글
프로그래머스 [level3] 아이템 줍기- python3 (0) | 2023.09.08 |
---|---|
프로그래머스 [level3] 동적삼각형 - python3 (0) | 2023.09.08 |
프로그래머스 [level2] 멀리 뛰기 - python3 (4) | 2023.09.06 |
프로그래머스 [level2] 귤 고르기 - python3 (1) | 2023.09.04 |
프로그래머스 [level2] H-Index - python3 (0) | 2023.09.01 |