본문 바로가기

Python(알고리즘,문제풀이)/BOJ (Bronze IV)

백준 24365번 / ПЧЕЛИЧКАТА МАЯ(여왕벌 마야) - 파이썬

728x90

📚문제

출처 : 백준 24365번(https://www.acmicpc.net/problem/24365)

 

📝풀이

# 24365 ПЧЕЛИЧКАТА МАЯ(여왕벌 마야)
# 내 코드 - 계속 틀림

a, b, c = map(int,input().split())
x = int((a+b+c)/3)
print(abs(x-b) + abs(x-c)*2)

처음에 작성한 코드

거의 대부분의 예시에서 되는데 어떤 경우 때문에 실패하는지 생각해봤다

가운데 b가 세 수의 평균보다 작은 경우엔 값이 달라진다(ex 2 5 11)

 

# 24365 ПЧЕЛИЧКАТА МАЯ(여왕벌 마야)
a, b, c = map(int,input().split())
cnt= 0 # 꿀벌의 이동횟수(=거리)

# c -> b
cnt += c-x
b += c-x

# b -> a
cnt += b-x

구글링하여 다른 풀이를 참고한 후 코드

단순하게 꽃 위치를 하나씩 옮겨갈때마다 횟수(거리)를 계산한 코드

보고 이해하는데도 시간이 좀 걸렸다 

다음에 비슷한 문제가 나왔을 때 바로 풀이가 떠오를 지 잘 모르겠다

 

 

a, b, c = map(int,input().split())
print(-a+c)

구글링 하다가 찾은 겁나 간단한 코드.....ㅎ

답이 맞는게 신기하다

단순하게 답이 맞는거 말고 어떤 수식으로나 논리적으로도 설명이 가능한건지 궁금하다

 

정답인 코드 수식을 하나하나 풀어서 대입해보니 아래와 같이 간단한 코드로 나온다...!! 싱기

# 24365 ПЧЕЛИЧКАТА МАЯ(여왕벌 마야)

# 세 수가 동일 == 세 수 모두 세 수의 평균으로 만들어준다 
a,b,c = map(int,input().split())
avg = int((a+b+c)/3)

# cnt : 꿀벌이 움직인 거리(움직인 횟수)
cnt = 0 

# 꿀벌이 c -> b로 이동하는 경우
c를 평균만큼 만들어주어야 하므로 (c-avg)마리의 꿀벌이 b로 이동하면 c가 avg가 됨
cnt += c-avg # (c-avg)마리의 벌이 1m씩 이동함 -> 1*(c-avg)
b += b + (c-avg) # 기존에 있던 b마리에 (c-avg)마리의 벌 추가

# 꿀벌이 b -> a로 이동하는 경우
마찬가지로 b를 평균으로 만들기 위해서 (b-avg)마리의 꿀벌이 이동하면 b가 avg됨
cnt에 b->a로 이동한 횟수 추가
cnt += b + (c-avg) -avg

# 이 때 8번째 코드에서 cnt에 c-avg가 추가되어 할당 되어있는 상태. 따라서 최종 cnt는
cnt = c-avg + b+ (c-avg) - avg
cnt = 2*c+b -3*(avg)

# 3번째 코드에서 3*(avg) = int(a+b+c)
# 위 식에 대입하면
cnt = 2*c+b -int(a+b+c)
cnt = c-a

 

 

728x90