- 피자 나눠 먹기(1)
피자를 일곱 조각으로 잘라 주는데, 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return
내가 쓴 코드
class Solution {
public int solution(int n) {
int answer = 0;
if (1<= n && n <= 100){
answer = ((n-1) / 7)+1;
}
return answer;
}
}
진짜 빨리 풀었는데 더 간단할 수 있을까? 하고 다른 풀이를 보다가..
class Solution {
public int solution(int n) {
return (n + 6) / 7;
}
}
대박...
이렇게 되면 1사람이 먹을 때와 7명이 먹을 때 모두 피자 한 판이 필요한 경우를 모두 다룰 수 있다!
7로 나눠 떨어지는 경우에서 6을 더 하고 7로 나누면 나머지가 6이 되니까 몫이 1 커지는 걸 막을 수 있음.
7의 배수보다 하나 더 크다는 이유로 피자가 한 판이 늘어나는 경우도 다룰 수 있고!
수학적...사고를 하자
- 피자 나눠 먹기(2)
피자가 여섯 조각이고 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return
class Solution {
public int solution(int n) {
int answer = 0;
int gcd = 0;
if (1 <= n && n <= 100){
if (n % 6 == 0) answer = n / 6;
else { //최소공배수 = 두수의 곱 / 최대공약수
for (int i = 1; i < 6; i++){
if (n % i == 0 && 6 % i == 0){
gcd = i;
}
}
answer = n / gcd;
}
}
return answer;
}
}
예상대로 다른 사람들 풀이에서는 GCD 함수를 따로 작성하여 내 눈에 친숙한 유클리드 호제법을 이용한 경우가 있었다. 그 외에 독특한 코드는 아래 코드였는데,
class Solution {
public int solution(int n) {
int answer = 1;
while(true){
if(6*answer%n==0) break;
answer++;
}
return answer;
}
}
: gcd를 무한루프를 이용하여 표현한 것을 처음 봤다!
그리고 어쩌면 저 if문의 조건이 문제를 그대로 표현한 것으로 보인다. 피자 한 판은 6조각, 몇개(answer)여야 n명의 사람들이 나눠먹을 때 딱 떨어질까! 딱 떨어지지 않으면 answer(피자 판 수)를 늘리는 거지!
- 피자 나눠 먹기(3)
피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라준다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return
class Solution {
public int solution(int slice, int n) {
int answer = 1;
if (2 <= slice && slice <= 10 && 1 <= n && n <= 100){
while (true){
if (slice * answer - n >= 0) break;
else{
answer++;
}
}
}
return answer;
}
}
이것도 금방 풀었다! while 문 쓰는거 진짜 편하다. 피자 나눠먹기(2)의 다른 사람의 풀이를 보고 바로 사용해 본 예시이다. 제한 사항을 내가 기재해서 그렇지 긴 코드는 절대 아니라고 생각
근데..ㅎㅎㅎ 역시 더 짧은 것도 있어
class Solution {
public int solution(int slice, int n) {
return n % slice > 0 ? n/slice+1 : n/slice;
}
}
n명의 사람들을 slice조각으로 나눴을 때 나머지가 있으면 남는 사람들이 있다는 거니까 slice로 나눈 몫에 1을 더하는게 맞고, 아니면 그대로!
- 배열의 평균값
class Solution {
public double solution(int[] numbers) {
double sum = 0;
for (int i = 0; i< numbers.length; i++){
sum += numbers[i];
}
return (sum / numbers.length);
}
}
다른 사람의 풀이
import java.util.Arrays;
class Solution {
public double solution(int[] numbers) {
return Arrays.stream(numbers).average().orElse(0);
}
}
.orElse(0) -> 주어진 값이 null이 아닌 경우 주어진 값을 되돌려주고 null인 경우 인수(0)을 돌려줌
Stream.. Power JAVA에서 거의 끝부분 내용이라 수업에서 안 배웠나보다. 따로 공부해야겠다!
Stream이 들어가는 순간 간결해지네
'Algorithms' 카테고리의 다른 글
Programmers Day 7 (0) | 2023.07.18 |
---|---|
Programmers Day 6 (0) | 2023.07.17 |
Programmers Day 5 (0) | 2023.07.11 |
JAVA Stream (0) | 2023.07.09 |
Programmers Day 3 (0) | 2023.07.09 |