WIL-02

20210614 ~ 20210620 항해99 2주차 회고

이번주는 하루종일 알고리즘 문제만 풀었다. 하루 평균 4문제 해결이 권장 목표인데 총 27문제를 풀었으니 괜찮은 한 주를 보낸 것 같다. 하지만 더 노력했으면 더 많은 문제를 풀 수도 있었다는 생각이 들기도 한다. 남은 문제들이 이전에 풀었던 문제들보다 난이도 있는 문제들이라서 걱정이 되기는 하지만 남은 문제들도 남은 3일동안 열심히 풀어볼 예정이다.

이번주에 풀었던 문제 중에서 이해가 안되는 문제가 몇 개 있었는데 그 중에 백준 1011번 문제는 특히 어려웠다. 그런데 크루원 중에서 그 문제에 대한 설명을 해주시겠다는 분이 계셔서 얼른 발표를 들으러 갔다. 발표 내용을 듣던 도중 그 문제를 푸시는데 얼마나 걸리셨냐는 질문이 나왔는데 발표자 분은 2시간 정도 고민했다고 하셨다. 그 때, 나는 이 문제에 대해 고민을 얼마나 했었는지 생각해봤는데 30분 정도밖에 안했던 것 같았다. 안풀리는 문제가 있을 때 깊게 고민하지 않았던 것에 대해 반성하게 되는 시간이었고, 이제부터는 안풀리는 문제가 있으면 끝까지 풀어보려 하는 집념을 키워야 겠다는 생각이 들었다.

백준 1011번 Fly me to the Alpha Centauri

https://www.acmicpc.net/problem/1011

풀이

def distance(x,y):
    distance = y - x
    count = 0 # 이동 횟수
    move = 1 # count별 이동 가능한 거리
    move_plus = 0 # 이동한 거리의 합
    while move_plus < distance:
        count += 1
        move_plus += move 
        if count % 2 == 0: 
            move += 1
    print(count)
  • 위 표는 문제를 풀 때 필요한 거리, 경로, 이동 횟수를 정리한 표이다. 위 표를 보면 이동 횟수(count)의 숫자가 증가할 때 일정한 규칙을 가지고 증가하는 것을 볼 수 있다.
  • 이동 횟수를 나타내는 숫자의 빈도수가 1,1,2,2,3,3,4,4 이런 식으로 두 번씩 나타나는 규칙이 있다.
  • 이 빈도수에 해당하는 수를 더한 합은 count 숫자에 따라 이동 가능한 최대 거리를 나타낸다. 예를 들어 count가 6이라면 count6까지 우측 move distance 숫자를 모두 더하면 12가 된다.
  • 처음에 입력받은 목표 위치 y에서 현재 위치 x를 뺀 distance 변수가 while문을 반복하면서 이동거리 증가 수(move_plus)보다 큰 경우에만 반복한다.
  • count 수에 해당하는 move를 더하고 만약 count가 2의 배수라면 move에 1을 더하는 반복문이다.
  • 즉, count가 증가할 때마다 해당 count에 따라 이동할 수 있는 거리를 합해가면서 처음에 입력받은 이동거리 distance에 도달하면 반복문을 멈춰서 count를 구하는 방식이다.

좋은 웹페이지 즐겨찾기