백준 알고리즘 #14568

Zion·2023년 11월 20일
0

백준

목록 보기
2/4

백준 알고리즘 : 2017 연세대학교 프로그래밍 경시대회

🔒 문제

백준 알고리즘 #14568

🔑풀이

idea

  • 우선 영훈, 남규, 택희에게 for문을 통해 사탕을 분배한 후 if문으로 조건을 검사
    1. 영훈, 남규, 택희 1개 이상의 사탕을 가져야 함.
    2. 남규 >= 영훈 + 2
    3. 남는 사탕이 없어야 하므로, candy = 영훈 + 남규 + 택희
    4. 택희는 짝수개의 사탕을 받음 -> 택희 % 2 == 0

code

candy = int(input())
count = 0

for 영훈 in range(1, candy + 1):
	for 남규 in range(1, candy + 1):
    	for 택희 in range(1, candy + 1):
        	if candy == 영훈 + 남규 + 택희 :
            	if 남규 >= 영훈 + 2 :
            		if 택희 % 2 == 0 :
                		count += 1
                        
print(count)

+

3중 루프의 코드 + if문의 반복이 코드를 복잡하게 만들고 시간이 오래걸리기 때문에, for문에 조건을 추가하고 루프를 최대한 줄여보는 방향으로 생각해봄.
처음에는 남규 = 영훈 + 2 로 착각해서 단일 루프가 가능하겠다 생각했는데 문제를 다시 읽어보니, 남규 >= 영훈 + 2 였다..!
그래서 영훈이와 남규가 받을 사탕의 개수를 for문을 사용하고, 택희가 받을 사탕의 개수는 전체 - (영훈 + 남규)를 사용해 코드를 다시 짜보았다.


candy = int(input())
count = 0

# 영훈, 남규, 택희 모두 1개 이상의 사탕을 받아야 하므로,
# 영훈이가 받을 사탕의 개수를 candy - 2개로 제약
for 영훈 in range(1, candy - 1):
	for 남규 in range(영훈 + 2, candy - 1 - 영훈):
    	택희 = candy - (영훈 + 남규)
        
        if 택희 > 0 and 택희 % 2 == 0 :
        	count += 1

print(count)

메모리 크기는 같지만 시간은 156ms -> 44ms 로 감소하긴 했다..!

0개의 댓글