10. 스파르타 코딩 클럽 - 3월 24일 코딩테스트 연습 (코드카타)
❓ 오늘의 문제
1. 피자 나눠 먹기 (1)
나의 정답 코드
import Foundation
func solution(_ n:Int) -> Int {
guard n >= 1 && n <= 100 else {return 0}
return (n + 6) / 7
}
2. 피자 나눠 먹기 (3)
- 머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해 보세요.
나의 정답 코드
import Foundation
func solution(_ slice:Int, _ n:Int) -> Int {
return (n+(slice-1)) / slice
}
✓ TIL
오늘은 피자 나눠 먹기 (1), (3)라는 문제를 풀어보았다.
7조각으로 나누어지는 피자를 n명이서 나눠먹을 때, 모든 사람이 한 조각 이상 먹기 위해 필요한 피자의 수를 구하는 문제이다.
예를 들어 1명일 때 1판, 7명일 때 1판, 15명일 때 3판이 필요하다.
처음 로직을 구현할 때 내가 했던 생각은 1명~7명까지는 1판이고, 그 이후로는 주어진 n명을 7로 나누고 나온 몫에 1을 더해서 피자의 수를 구하는 방법을 생각하고 코드를 작성했다.
그러나 이 방법으로 코드를 구현하면 7의 배수일 때 예를 들어 14명일 때 나온 몫인 2에 1을 더해서 3판이라는 값이 나온다.
14명이면 2판이 정답이지만 3이라는 값이 나오는 코드이기 때문에 7의 배수가 나오는 테스트에서는 실패한다.
그래서 찾은 방법은 (n+6)을 한 뒤 7로 나누는 방법이다.
해당 방법은 올림 한 몫을 구하는 효과가 있는 계산식이다.
1~6까지를 처리해 줄 수 있고, 이후의 7의 배수에서도 오류 없이 처리할 수 있다.
위와 같은 방식으로 피자 조각 slice와 먹는 사람의 수 n이 주어질 때 n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자가 필요한지 구하는 문제도 쉽게 풀 수 있었다.
같은 로직을 사용하고 계산식만 상황에 맞게 수정해 주었다.
n + 6을 하기 위해 slice-1을 먼저 계산하고 나온 값을 n에 더한 뒤 slice로 나누어 주는 식이다.
아까는 7조각으로 나누어졌기 때문에 7-1을 해서 n에 6을 더해주었지만
이번에는 slice 조각이기 때문에 slice - 1을 한 뒤 n에 더해주고
그 값을 slice로 나눈다.
추가로 오늘은 guard문을 사용해서 제한사항 처리도 해보았다.