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

정수 num1, num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.
제한사항
num1 ≤ 100num2 ≤ 100입출력 예
| num1 | num2 | result |
|---|---|---|
| 3 | 2 | 1 |
| 10 | 5 | 0 |
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의 길이는 홀수입니다.array의 길이 < 100array의 원소 < 1,000입출력 예
| array | result |
|---|---|
| [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 합니다.
제한사항
array의 길이 < 100array의 원소 < 1000입출력 예
| array | result |
|---|---|
| [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) 값이 여러개 입력된 경우
3) 큰 값이 입력되는 경우 → count 배열 크기는 array 배열의 값을 중심으로 짜여지도록 해야 함.
정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
n ≤ 100입출력 예
| n | result |
|---|---|
| 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;
}
}

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.
제한사항
n ≤ 100입출력 예
| n | result |
|---|---|
| 7 | 1 |
| 1 | 1 |
| 15 | 3 |
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
…
머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
제한사항
1 ≤ n ≤ 100
입출력 예
| n | result |
|---|---|
| 6 | 1 |
| 10 | 5 |
| 4 | 2 |
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로 바꿔서 계산해야 함.
머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
제한사항
slice ≤ 10n ≤ 100입출력 예
| slice | n | result |
|---|---|---|
| 7 | 10 | 2 |
| 4 | 12 | 3 |
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 함수를 완성해주세요.
제한사항
numbers의 원소 ≤ 1,000numbers의 길이 ≤ 100입출력 예
| numbers | result |
|---|---|
| [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) 기록표
