본문 바로가기

알고리즘/백준알고리즘

[백준 알고리즘/Python] 2309 일곱 난쟁이

문제

 

 

문제 이해

처음에 7명의 난쟁이로 100을 구하는 방법을 썻는데 3중 for문으로 나와 답이 안나왔씁니다. 고려해야할 경우도 많았구요. 다른 접근방법을 생각해보니 전체 난쟁이 중에서 2명만 거르면 되는거였습니다.

전체 난쟁이의 합 - (다른 난쟁이 2명) 을 하면 진짜 난쟁이는 100의 값을 가질 수 있습니다.

 

코드

result = []
for i in range(9):
    result.append(int(input()))

sum_a = sum(result)
Flag= False
for i in range(9):
    for j in range(i+1,9):
        if(100 == sum_a -(result[i] + result[j])):
            result[i] = 0
            result[j] = 0
            result.sort()
            Flag = True
            break
    if(Flag):
        break    
for k in range(2, len(result)):
    print(result[k])

진짜 난쟁이는 result에 담기고 가짜난쟁이들은 0으로 치환했습니다.

 

이 때 Flag는 2중 for을 빠져나가기 위해 필요합니다.

만약 난쟁이가 [5, 5,10, 5, 5, 20, 20, 20, 20] 로 들어오면 5, 5 2개가 다른 난쟁이 입니다. 

728x90