코딩테스트(백준 탐욕법(GREEDY) (11034번: 캥거루 세마리2))

문제
캥거루 세 마리가 사막에서 놀고 있다. 사막에는 수직선이 하나 있고, 캥거루는 서로 다른 한 좌표 위에 있다.

한 번 움직일 때, 바깥쪽의 두 캥거루 중 한 마리가 다른 두 캥거루 사이의 정수 좌표로 점프한다. 한 좌표 위에 있는 캥거루가 두 마리 이상일 수는 없다.

캥거루는 최대 몇 번 움직일 수 있을까?

입력
여러개의 테스트 케이스로 이루어져 있으며, 세 캥거루의 초기 위치 A, B, C가 주어진다. (0 < A < B < C < 100)

출력
각 테스트에 대해 캥거루가 최대 몇 번 움직일 수 있는지 출력한다.

예제 입력 1 복사
2 3 5
3 5 9
예제 출력 1 복사
1
3

나의 풀이: 맞았다!

while True:
    try:
        A, B, C = map(int, input().split())
        print(max(B-A, C-B)-1)
    except:
        break

다른 사람 풀이:

	while True:   # 테스트케이스의 개수가 주어지지 않음
    try:
        a, b, c = map(int, input().split())
    except:   # 테스트케이스가 더이상 주어지지 않는 경우
        break
    count = 0
    while True:
        dis_1 = b - a
        dis_2 = c - b
        if dis_1 == 1 and dis_2 == 1:
            print(count)
            break
        if dis_1 <= dis_2:   # a~b사이의 간격이 b~c사이의 간격보다 작거나 같은 경우
            a, b = b, b+1   # a를 b+1로 이동 후, 좌표 순서대로 정렬
        else:
            b, c = b-1, b   # c를 b-1로 이동, 좌표 순서대로 정렬
        count += 1   # 움직인 횟수 1 증가

TAKEAWAY:

  • 예로 100 200 250 지점에 캥거루가 있다면,
    100 ~ 200 쪽이 200~ 250보다 더 공간이 넓으므로 250캥거루가 101 지점으로 점프,
    100 101 200 에서 100 캥거루가 102로 점프.
    101 102 200 에서 101 캥거루가 103으로 점프,
    정답은 "넓은 공간의 캥거루의 간격 - 1"만큼이 점프횟수.

느낀점:

좋은 웹페이지 즐겨찾기