스파르타 코딩 클럽 - iOS 스타터 6기/알고리즘 코드카타

10. 스파르타 코딩 클럽 - 3월 24일 코딩테스트 연습 (코드카타)

seongpil Heo 2025. 3. 24. 12:35

❓ 오늘의 문제

1. 피자 나눠 먹기 (1)

피자 나눠 먹기 (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 함수를 완성해 보세요.

피자 나눠 먹기 (3)

나의 정답 코드

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문을 사용해서 제한사항 처리도 해보았다.


😼 GitHub

잔디 잔디