(12/27) 코딩테스트 스터디

6720·2022년 12월 27일

👨‍🏫 이번 목표

프로그래머스 코딩테스트 입문 Java로 Day 3 사칙연산, 배열, 수학, Day 4 수학, 배열 풀기

📒 문제 풀이 (Day 3 사칙연산, 배열, 수학)

나머지 구하기

정수 num1num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 0 < num1 ≤ 100
  • 0 < num2 ≤ 100

입출력 예

num1num2result
321
1050
class Solution {
    public int solution(int num1, int num2) {
        int answer = num1 % num2;
        return answer;
    }
}

중앙값 구하기

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

제한사항

  • array의 길이는 홀수입니다.
  • 0 < array의 길이 < 100
  • 1,000 < array의 원소 < 1,000

입출력 예

arrayresult
[1, 2, 7, 10, 11]7
[9, -1, 0]0
import java.util.*;
class Solution {
    public int solution(int[] array) {
        Arrays.sort(array);
        int answer = array[array.length/2];
        return answer;
    }
}

최빈값 구하기

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

제한사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

입출력 예

arrayresult
[1, 2, 3, 3, 3, 4]3
[1, 1, 2, 2]-1
[1]1
import java.util.*;

class Solution {
    public int solution(int[] array) {
        int answer = 0, count_arr_max = 0, count_arr_cnt = 0, array_max = 0;
        

        if (array.length == 1) answer = array[0];
        else {
            for (int i = 0; i < array.length; i++) {
                if (array[i] >= array_max) array_max = array[i];
            }

            int[] count = new int[array_max+1];
            
            for (int i = 0; i < array.length; i++) count[array[i]]++;

            for (int i = 0; i < count.length; i++) {
                if (count[i] >= count_arr_max) count_arr_max = count[i];
            }

            for (int i = 0; i < count.length; i++) {
                if (count[i] == count_arr_max) {
                    count_arr_cnt++;
                    answer = i;
                }
                if (count_arr_cnt > 1) answer = -1;
            }
        }
        
        return answer;
    }
}

어후..

1) 주어지는 배열의 최대값 얻기 → count 배열의 크기 정하기 위해

만약에 배열의 크기는 6인데 가장 큰 값이 12라면 가장 큰 값(+1)을 count의 크기로 해야함.

2) ★ count[array[i]]++ ★ 을 사용하기 (참고 링크)

count를 사용할 시 {9,4,8,2,6,12}를 입력하면 count는 [0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1]가 됨. → 한 개씩 입력되는 경우를 조심해야 함.

3) count 배열에서의 가장 큰 값을 얻어옴.

4) 얻어온 count 배열의 큰 값과 같은 값이 여러 개라면 -1을 출력하도록, 그렇지 않다면 count 배열의 큰 값이 저장되어 있는 인덱스를 answer로 리턴하기

입력값이 어떤지를 잘 살펴야 함!!

1) 값이 하나만 입력된 경우 → 그 값이 최빈값

2) 값이 여러개 입력된 경우

  • 최빈값이 하나인 경우 → 그 값 출력
  • 최빈값이 여러개인 경우 → -1 출력

3) 큰 값이 입력되는 경우 → count 배열 크기는 array 배열의 값을 중심으로 짜여지도록 해야 함.

짝수는 싫어요

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ n ≤ 100

입출력 예

nresult
10[1, 3, 5, 7, 9]
15[1, 3, 5, 7, 9, 11, 13, 15]
class Solution {
    public int[] solution(int n) {
        int[] answer = new int[(n+1)/2];
        
        for (int i = 0; i <= n; i++) {
            if (i % 2 != 0) answer[i/2] = i;
        }
        
        return answer;
    }
}

📒 문제 풀이 (Day 4 수학, 배열)

피자 나눠 먹기 (1)

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

제한사항

  • 1 ≤ n ≤ 100

입출력 예

nresult
71
11
153
class Solution {
    public int solution(int n) {
        int answer = 0;

        answer = (n+6)/7;
        
        return answer;
    }
}

1~7 → 1판 —(+6)→ 7~13 —(/7)→ 1

8~14 → 2판 —(+6)→ 14~20 —(/7)→ 2

15~21 → 3판 —(+6)→ 21~27 —(/7)→ 3

피자 나눠 먹기 (2)

머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

제한사항

1 ≤ n ≤ 100

입출력 예

nresult
61
105
42
class Solution {
    public int solution(int n) {
        int answer = 0;
        
        int gcd = GCD(n, 6);
        answer = n / gcd;
        return answer;
    }

    public int GCD(int num1, int num2) {
        int tmp = 0;
        if (num1 < num2) {
            tmp = num2;
            num2 = num1;
            num1 = tmp;
        }
        if (num1 % num2 == 0) return num2;
        return GCD(num2, num1 % num2);
    }
}

6과 n의 최소공배수 구하기 → 최소공배수가 곧 최소로 먹게되는 피자조각

피자조각/6이 answer

최소공배수 = (num1 * num2) / 최대공약수

최대공약수(gcd)는 num1%num2가 0이 될 때까지 반복해서 계산을 해야하며 계산을 할때마다 num1을 num2로, num2를 num1%num2로 바꿔서 계산해야 함.

피자 나눠 먹기 (3)

머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 2 ≤ slice ≤ 10
  • 1 ≤ n ≤ 100

입출력 예

slicenresult
7102
4123
class Solution {
    public int solution(int slice, int n) {
        int answer = 0, count = 1;
        
        if (slice > n) answer = 1;
        else {
            if (n % slice == 0) answer = n / slice;
            else answer = (n / slice) + 1;
        }
        
        return answer;
    }
}

slice와 n의 관계

1) slice가 n보다 크다 ⇒ 조각이 많이 때문에 한 판으로 모든 인원이 한 조각씩은 먹을 수 있음. → 1판

2) slice가 n보다 작다

  • n % slice == 0 ⇒ 피자 판 단위로 딱 맞아 떨어짐.
  • 그 이외의 경우는 몇 명이 남는 상황 → 피자 한 판 추가해주면 됨.

배열의 평균값

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

입출력 예

numbersresult
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]94.0
class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        int sum = 0;

        for (int i = 0; i < numbers.length; i++) {
            sum += numbers[i];
        }
        answer = (double)sum / numbers.length;
        
        return answer;
    }
}

✨ 후기

1) 확실히 백준과는 다른 어려움이다. 병행하면 애좀 먹을 것 같다.

2) 기록표

profile
뭐라도 하자

0개의 댓글