나머지 구하기
정수 num1, num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.
- 0 < num1 ≤ 100
- 0 < num2 ≤ 100
const solution = (num1, num2) => (num1 % num2);
쉬운 문제. 화살표 함수로 간결하게 작성하였다.
중앙값 구하기
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
- array의 길이는 홀수입니다.
- 0 < array의 길이 < 100
- -1,000 < array의 원소 < 1,000
// 1.array 배열의 요소를 출력한다.
// 2.요소들의 값을 비교한다.
// 3.가장 작은 값을 새로운 배열에 넣는다.
// 4.정렬된 배열에서 가운데 값을 출력한다.
// 1.array 배열의 요소를 출력한다.
// 2.요소들의 값을 비교한다.
// 3.가장 작은 값을 새로운 배열에 넣는다.
// 4.정렬된 배열에서 가운데 값을 출력한다.
function solution(array) {
let arrayCnt = 0;
let newArray = [];
while(arrayCnt < array.length) {
// 배열에서 최솟값 찾기
let minNumber = 1000;
let cnt = 0;
while(cnt < array.length) {
if(minNumber > array[cnt]) minNumber = array[cnt];
cnt = cnt + 1;
}
// minNumber <- 최소값
newArray.push(minNumber);
// 원래 배열에서 찾은 값은 지운다.
let cnt2 = 0;
while(cnt2 < array.length) {
if(minNumber === array[cnt2]) {
array[cnt2] = 1000;
break;
}
cnt2 = cnt2 + 1;
}
arrayCnt = arrayCnt + 1;
}
return newArray[(Math.floor(array.length / 2))];
}
// 다른 사람의 풀이
function solution(array) {
return array.sort((a, b)) => a - b)[Math.floor(array.length / 2)];
}
알고리즘의 순서까지는 생각해냈는데, 코드를 어떻게 적용해야 할지 몰랐다. "for.. of문을 사용하면 될 것 같은데..." 까지는 떠올렸다.
배열을 정렬하는 것이 쉬운 느낌이지만, 낯선 입장에서는 어려운 게 맞다는 말에 안도... 그렇지만 안주하지는 말자!
어려웠던 문제... 아직 잘 모르겠다. 종종 들여다보자!
<다른 사람의 풀이에 대한 이해>
sort() 함수를 사용하면 한 번에 끝나는 문제.
참 허탈하다. 그럼에도 for문으로 무식하게 하자. 이 방법이 옳다고 믿기 때문에.
1) sort() 메소드를 사용하여, 오름차순으로 정렬한다. // 원본 배열을 정렬한다.
2) 배열도 객체이므로, 대괄호 표기법을 활용하여 값에 접근한다.
3) Math.floor()를 사용했으므로, 수직선 상의 오른쪽 값을 갖는다. 즉, array[값]
최빈값 구하기
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
// 1.배열의 요소를 같은 숫자끼리 정렬시킨다.
// 2.정렬된 배열 ex) [a, a, a, b, b, c, c ...]의 요소의 첫 번째 요소와 다음 요소를 비교한다.
// 3.비교를 통해 값이 같으면 기록하고, 다를 경우 새로운 카운트를 시작한다.
function solution(array) {
let sortedArray = array.sort((a, b) => a - b);
let answer = 0;
let cnt = 0;
let choi = -1; // 처음 최빈값
let choiRepeatCnt = 0; // 최빈값이 될 때, 몇 번 반복 된건지
let repeatCnt = 0; // 현재 똑같은 숫자가 몇 번 등장헀는지
let beforeNumber = -1; // 지금 보고 있는 숫자 이전의 값
let isDupChoi = false;
while(cnt < array.length) {
if(beforeNumber !== array[cnt]) {
repeatCnt = 1;
} else {
repeatCnt = repeatCnt + 1;
}
if(repeatCnt === choiRepeatCnt) {
if(choi !== array[cnt]) {
isDupChoi = true;
}
}
if(repeatCnt > choiRepeatCnt) {
choi = array[cnt];
choiRepeatCnt = repeatCnt;
isDupChoi = false;
}
beforeNumber = array[cnt];
cnt = cnt + 1;
}
if(isDupChoi) return -1;
return choi;
}
// 다른 사람의 풀이
function solution(array) {
let m = new Map();
for (let n of array) m.set(n, (m.get(n) || 0)+1);
m = [...m].sort((a,b)=>b[1]-a[1]);
return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}
function solution(array) {
let obj = {}
for(let i = 0 ; i < array.length ; i++){
if(obj[array[i]]){
obj[array[i]]++
}
else{
obj[array[i]] = 1
}
}
let nums = []
for(let key in obj){
nums.push(obj[key])
}
let max = Math.max(...nums)
let result = []
for(let key in obj){
if(obj[key] === max){
result.push(Number(key))
}
}
return (result.length === 1 ? result[0] : -1)
}
위의 문제(중앙값 구하기)와 마찬가지로 아이디어까지는 얼추 떠오르는데.. 어렵다.
잘 익혀두자.
<다른 사람의 풀이에 대한 이해>
해설을 달기에는 내 실력이 부족하다. 일단 keep!
깔끔해보여서 가져왔다.
객체를 활용하고, for...in 함수를 사용해서 신선했다.
Math.max()
짝수는 싫어요
정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
- 1 ≤ n ≤ 100
function solution(n) {
let answer = [];
let i = 1;
while(i <= n) {
if(i % 2 !== 0) {
answer.push(i);
}
i++;
}
return answer;
}
// 다른 사람의 풀이
function solution(n) {
let answer = [];
for(let i = 1; i <= m; i += 2) {
answer.push(i);
}
}
function solution(n) {
return Array(n).fill(1).map((v, i) => v + i).filter(v=> v % 2 === 1);
}
비교적 쉬웠던 문제. 새로운 배열을 만들고 반복문을 통해 얻어진 값을 push()를 사용하여 새로운 배열을 완성시킨다.
<다른 사람의 풀이에 대한 이해>
반복문의 step을 2로 증가시켜서 처음부터 짝수가 나오지 않게 만들 수 있다! 증감 표현도 자유자재로 다뤄보자!
메소드 체이닝을 해체해보자.
1) Array(n)을 통해 n개의 요소를 갖는 배열을 만든다.
2) fill(1)을 통해 배열의 요소들을 1로 채운다. // [1, 1, 1, 1, ...., 1]
3) map((v, i) => v + i)를 통해, 새로운 배열을 만든다.
--> [1 + 0, 1 + 1, 1 + 2, ...., 1 + n] 즉, 1부터 n까지를 요소로 갖는다.
4) filter(조건)을 통해, 배열의 요소를 변경한다. // filter()는 새로운 배열을 만들지 않고 원본 배열을 수정한다.
참고 영상
'코딩테스트 > 프로그래머스 0단계 - 입문' 카테고리의 다른 글
프로그래머스 0단계 - Day5 수학, 배열 (0) | 2024.03.15 |
---|---|
프로그래머스 0단계 - Day4 수학, 배열 (0) | 2024.03.14 |
프로그래머스 0단계 - Day2 사칙연산, 조건문, 배열 (0) | 2024.03.11 |
프로그래머스 0단계 - Day1 사칙연산 (0) | 2024.03.11 |
시작하기에 앞서 (0) | 2024.03.11 |
댓글