알고리즘/구름level

구름LEVEL 1단계 - 의좋은 형제 (Python)

Coblin 2020. 1. 9. 18:32
반응형

https://level.goorm.io/exam/49088/%EC%9D%98%EC%A2%8B%EC%9D%80-%ED%98%95%EC%A0%9C/quiz/1

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io

문제설명

조선시대 수도 한양에서 한참 떨어진 곳에 위치한 한 고을에는 의좋은 형제가 살았다. 서로를 끔찍이 아낀다고 소문난 진우와 선우 형제는 항상 서로에게 퍼주지 못해 안달이 난 상태였다. 의리있는 만큼 성실했던 두 형제는 열심히 일하여 번 돈으로 식량을 어마어마하게 비축하여 가지고 있었다.

그러던 어느날, 진우는 밤 중에 몰래 집을 나와 자신의 식량 절반을 선우에게 가져다 주었다. 이 사실을 안 선우는 다음날 밤, 몰래 집을 나와 마찬가지로 자신의 식량 절반을 진우에게 가져다 주었다. 가지고 있는 식량의 양이 홀수라서 반으로 나눌 수 없는 경우, 그 식량을 통째로 넘겨준다. 만약 처음 두 형제가 모두 식량을 100씩 가지고 있다면 셋째 날 까지의 변화는 다음과 같다.

 

처음 상태 : 진우 100, 선우 100

첫째 날 : 진우 50, 선우 150

둘째 날 : 진우 125, 선우 75

셋째 날 : 진우 62, 선우 138

 

매일 밤 계속되는 이 모습을 지켜본 동네 꼬마는 문득 D번째 날에는 두 형제에게 식량이 얼마나 남아있을지 궁금해졌다. D번째 날에 진우와 선우는 식량을 얼마나 갖고 있을지 출력하라.

 

제한조건

첫째 줄에는 진우와 선우가 처음 갖고 있는 식량의 양이 정수로 주어진다 단, 1<=N1, N2 <=10000

둘쨰 줄에는 두 형제의 식량의 양을 알고 싶은 날 D가 정수로 주어진다. 단 1 <= d <= 100

D번째 날에 진우, 선우 순서로 갖고 있는 식량의 양을 공백으로 구분하여 출력한다.

 

입출력 예

n d answer
100 100 4 131 69
70 100 1 35 135
1 1 9 0 2
537 141 11 226 452

answer

user_input = input("식량의 양 (띄어쓰기로 구분)")
day = int(input("day\n"))
user_input = user_input.split() #입력받은 식량의 양을 split을 사용해 띄어쓰기기준으로 나눈다
a = int(user_input[0]) 
b = int(user_input[1]) #split으로 나눈 값중 0번째 위치한 값을 a에 1번째 위치한 값을 b에 담는다
n = 0 #무한루프를 돌릴때 멈출 기준점을 잡기위해 변수에 0을 담는다


while 1: #무한루프를 돌린다.
	n += 1 #횟수(날짜)를 세기위해 1씩 더해준다
	if n % 2 == 0: #짝수일과 홀수일(첫째날, 둘째날 등)을 구분하기위한 코드 짝수=선우, 홀수=진우
		if b % 2 == 0: #선우의 식량이 짝수일때
			a += (b / 2)
			b -= (b / 2)
            #절반의 식량을 진우에게 주고 자신의 식량에서 같은 값만큼 빼준다.
		else: #선우의 식량이 홀수일때
			a += (b // 2) + 1
			b -= (b // 2) +1
            #절반의 식량+1을 진우에게 주고 자신의 식량에서 같은 값만큼 빼준다.
	else:
		if a % 2 == 0: #진우의 식량이 짝수일때
			b += (a / 2)
			a -= (a / 2)
            #절반의 식량을 선우에게 주고 자신의 식량에서 같은 값만큼 빼준다
		else: #진우의 식량이 홀수일때
			b += (a // 2) + 1
			a -= (a // 2) + 1
            #절반의 식량+1을 선우에게 주고 자신의 식량에서 같은 값만큼 빼준다
	if n == day: #n(날짜)이 입력받은 날짜(day)와 같으면 멈춘다.
		break
print(int(a), int(b))

항상 말하지만 제코드가 꼭 정답은 아닙니다.

더욱더 효율적인 코드는 항상 존재하며 while이 아니라 다른 방법도 있을것입니다.

제가 풀때는 해당방법이 효율적이라고 생각이 들었고 while문 말고는 생각나지 않아 이렇게 풀었습니다.

혹시 다른 풀이나 더 효율적인 방법이 있다면 댓글로좀 알려주세요!

반응형