[Algorithm] 푸드 파이트 대회
문제 설명
푸드 파이트 대회가 열렸다. 두 사람이 동시에 같은 칼로리의 음식을 먹고 최종적으로 물을 먼저 마시는 사람이 승리.
주어진 Food 배열이 [1, 3, 4, 6] 라면
- [0]은 물
- [1]은 1번음식이 3개이므로 둘이서 하나씩 먹고 하나는 남음
- [2]는 2번 음식이 4개이므로 둘이서 두 개씩 먹음
- [3]은 3번 음식이 6개이므로 둘이서 세 개씩 먹음
따라서 이 음식을 줄지어 늘여뜨려보면 1223330333221 로 답을 내릴 수 있다. (가운데는 물, 두 선수가 양 끝에서부터 먹는다고 본다.)
푼 방법
class FoodFight {
func solution(_ food:[Int]) -> String {
var result = ""
let devidedFood: [Int] = food.map { $0 / 2 }
for (idx, food) in devidedFood.enumerated() {
result.append(String(repeating: String(idx), count: food))
}
let reversedResult = result.reversed()
return result + "0" + reversedResult
}
}
- food 배열을 모두 2로 나눈다.
- result 문자열에 음식 번호인 idx를 String(repeating:, count:)로 2로 나눈 값만큼 더한다.
- return은 결과값 + 물 + 결과값뒤집은 값이 되어야 양쪽을 표현할 수 있으므로 result + “0” + reversedResult로 반환한다.
Leave a comment