왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명
이었던 것이다.
아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨
을 기억해 냈다.
아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.
>> 9개의 정수가 주어지면 그 중 7개의 합이 100이 되는 조합을 찾아라
/*
순열을 이용해서 해결하면 되지만,
c++과 달리 swift는 지원되는 기능이 아니라
브루트포스 방식으로 이중루프로 해결
*/
// 난쟁이의 키 입력
var dwarf = [Int]()
for _ in 0..<9 {
dwarf.append(Int(readLine() ?? "" ) ?? 0)
}
// 모든 난쟁이 키 총합
let amount = dwarf.reduce(0, +)
var found = false
/*
바깥 for문(i)은 0 ~ 7 번 인덱스 탐색
안쪽 for문(j)은 바깥 for +1 부터 8번 인덱스까지 탐색
i가 0 일 때 dwarf[0] + dwarf[0]는 의미가 없는 연산이고
i보다 j가 작을 경우 이미 연산된 값이므로
j는 i보다 커야 한다.
*/
for i in 0..<8 {
for j in i+1..<9 {
let gap = dwarf[i] + dwarf[j]
/*
found 변수를 활용하는 이유는
for문을 두번 break 해야되기 때문에 선언하여 활용
*/
found = amount - gap == 100
if found {
dwarf.remove(at: j)
dwarf.remove(at: i)
break
}
}
if found {
break
}
}
dwarf.sort()
for d in dwarf {
print(d)
}