2024.06.15
2024.06.17
02 중앙값 구하기
03 최빈값 구하기
04 짝수는 싫어요
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열
array가 매개변수로 주어질 때, 중앙값을 return 하도록solution함수를 완성해보세요.
function solution(array) {
var answer = 0;
return answer;
}
◼ 제한사항
▪ array의 길이는 홀수입니다.
▪ 0 > array의 길이 > 100
▪ -1,000 > array의 원소 > 1,000
1) 배열에서 최소값 찾기
① 변수 선언
minNumber : 배열의 최소값 (초기엔 배열에 들어갈 수 없는 값으로 초기화한다. 최소값을 구해야하므로 가장 큰 값을 최소값에 넣는다.)
let minNumber = 1000;
(예시)
let minNumber = 1000;
if(minNumber > array[0]) {
minNumber = array[0];
}
if(minNumber > array[1]) {
minNumber = array[1];
}
if(minNumber > array[2]) {
minNumber = array[2];
}
(적용하기)
let minNumber = 1000;
//true
if(1000 > 9) {
minNumber = 9;
}
//true
if(9 > -1) {
minNumber = -1;
}
//false
if(-1 > 0) {
minNumber = array[2];
}
minNumber == -1;
② 코드 간결하게 작성
let minNumber = 1000;
for(let i=0; i<array.length; i++) {
if(minNumber > array[i]) {
minNumber = array[i];
}
}
2) 새 배열에 최소값 추가
① 새 배열 만들기
let newArray = [];
② 새 배열에 최소값 추가
▪ 배열에 값을 추가할 때는 push() 메소드를 사용한다.
let newArray = [];
newArray.push(minNumber);
3) 기존 배열에서 최소값 삭제
▪ 기존 배열에서 최소값에 해당하는 원소를 큰 숫자로 바꾼다.
for(let i=0; i<array.length; i++) {
if(minNumber === array[i]) {
array[i] = 1000;
}
}
▪ 최소값을 삭제했으면 반복문을 즉시 끝낸다. break문을 사용한다.
for(let i=0; i<array.length; i++) {
if(minNumber === array[i]) {
array[i] = 1000;
break;
}
}
4) 배열의 길이만큼 반복하기
for(let i=0; i<array.length; i++) {
//최소값 찾기
let minNumber = 1000;
for(let i=0; i<array.length; i++) {
if(minNumber > array[i]) {
minNumber = array[i];
}
}
//새 배열에 최소값 추가
let newArray = [];
newArray.push(minNumber);
//기존 배열에서 최소값 삭제
for(let i=0; i<array.length; i++) {
if(minNumber === array[i]) {
array[i] = 1000;
break;
}
}
}
▪ 예를 들어 배열의 길이가 5이면 중앙값은 array[2]가 될 것이고, 배열의 길이가 3이면 중앙값은 array[1]가 될 것이다.
▪ 이것을 참고해봤을 때, 배열 array의 중앙값은 배열 길이를 2로 나눈 것의 몫에 해당한다.
▪ 몫 구하는 함수 : Math.floor(n/2)
return newArray[Math.floor(array.length/2)];
💻 전체 코드
function solution(array) {
let minNumber = 1000;
let newArray = [];
//1. 정렬하기
for(let i=0; i<arary.length; i++) {
//1-1. 최소값 구하기
for(let i=0; i<array.length; i++) {
if(minNumber > array[i]) {
minNumber = array[i];
}
}
//1-2. 새 배열에 최소값 추가하기
newArray.push(minNumber);
//1-3. 기존 배열에서 최소값에 해당하는 원소 삭제
for(let i=0; i<array.length; i++) {
if(minNumber === array[i]) {
array[i] = 1000;
break;
}
}
}
//2. 중앙값 구하기
return newArray[Math.floor(array.length/2)];
| array | result |
|---|---|
| [1, 2, 7, 10, 11] | 7 |
| [0, -1, 0] | 0 |
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열
array가 매개변수로 주어질 때, 최빈값을 return 하도록solution함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
function solution(array) }
var answer = 0;
return answer;
}
◼ 제한사항
▪ 0 > array의 길이 > 100
▪ 0 >= array의 원소 > 1000
▪ 배열 정리 메소드
let sortedArray = array.sort((a,b) => a-b);
① 앞에서부터 차례대로 원소 세는 반복문
let cnt = 0;
while (cnt < array.length) {
cnt++;
}
② array[cnt] : 배열의 원소에 접근
let cnt = 0;
while (cnt < array.length) {
array[cnt];
cnt++;
}
1) 변수 선언
▪ choi : 최빈값 (등장할 수 없는 수인 -1로 초기화한다.)
▪ choiRepeatCnt : 최빈값이 될 때 몇 번 반복해서 된건지를 나타냄
▪ repeatCnt : 현재 똑같은 숫자가 몇 번 등장했는지를 나타냄 (현재 choi는 -1로 들어온 적 없는 값이므로 0으로 초기화한다.)
▪ beforeNumber : 지금 보고 있는 이전 숫자 (다른 숫자로 넘어갈 때를 나타내야 하므로 사용한다.)
let choi = -1;
let choiRepeatCnt = 0;
let repeatCnt =0;
let beforeNumber = -1;
2) 이전 숫자에서 다음 숫자로 넘어갈 때
▪ if : 배열에서 다음 숫자로 넘어갈 때를 의미함
if(beforeNumber !== array[cnt])
→ 이때 choi가 -1에서 배열의 첫번째 요소로 넘어가므로 repeatCnt = 1;로 초기화한다.
▪ else : 배열에서 다음 숫자로 넘어가지 않음을 의미함
→ repeatCnt를 1씩 증가한다.
let cnt = 0;
while (cnt < array.length) {
if(beforeNumber !== array[cnt]) {
repeatCnt = 1;
} else {
repeatCnt++;
}
array[cnt];
cnt++;
}
3) 새로운 최빈값의 등장
최빈값이 바뀌는 순간 ,
▪ choi는 배열의 현재 원소 즉, array[cnt]가 된다.
▪ 최빈값으로 바뀌게 된 카운트 숫자는(choiRepeatCnt) 현재 반복 횟수(repeatCnt)가 된다.
if(repeatCnt > choiRepeatCnt) {
choi = array[cnt];
choiRepeatCnt = repeatCnt;
}
beforeNumber = array[cnt];
cnt++;
return choi;
🚩 최빈값이 두 개 이상인 경우
1) 변수 선언
let isDupchoi = false;
2) 최빈값이 중복됐을 때 + 최빈값이 현재 원소와 다를 때
= 중복이라는 것을 마크한다.
if(repeatCnt === choiRepeatCnt) {
if(choi !== array[cnt]) {
isDupChoi = true;
}
}
3) 최빈값이 다시 등장한다면,
false로 값을 다시 바꿔준다.
if(repeatCnt > choiRepeatCnt) {
choi = array[cnt];
choiRepeatCnt = repeatCnt;
isDupCHoi = false;
}
④ 최빈값이 여러 개일 땐
-1을 반환한다.
if(isDupChoi) return -1;
💻 전체 코드
function solution(array) {
let sortedArray = array.sort((a,b) => a-b);
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++;
}
if(beforeNumber === choiRepeatCnt) {
if(choi !== array[cnt]) {
isDupChoi = true;
}
}
if(repeatCnt > choiRepeatCnt) {
choi = array[cnt];
choiRepeat = repeatCnt;
isDupChoi = false;
}
beforeNumber = array[cnt];
cnt++;
}
if(isDupChoi) return -1;
return choi;
}
| array | resut |
|---|---|
| [1, 2, 3, 3, 4, 4] | 3 |
| [1, 1, 2, 2] | -1 |
| [1] | 1 |
정수
n이 매개변수로 주어질 때,n이하의 홀수가 오름차순으로 담긴 배열을 return 하도록solution함수를 완성해주세요.
function solution(n) {
var answer = [ ];
return answer;
}
🚩 반복문 만들기
▪ 0부터 매개변수 n까지의 숫자를 차례로 비교해야 하므로 n만큼의 반복 횟수를 가진 반복문을 만든다.
for(let i=0; i<=n; i++) {
}
🚩 조건문 만들기
▪ 홀수일 때의 값을 찾아야 하므로 조건문에 조건식 i % 2 !== 0을 넣는다.
for(let i=0; i<=n; i++) {
if(i % 2 !== 0) {
}
}
🚩 조건식이 참일 때 요소 넣기
▪ 조건문이 참일 때 answer에 만족하는 수를 넣어야 하므로
배열의 마지막에 요소를 추가하는 메소드 push() 메소드를 활용한다.
for(let i=0; i<=n; i++) {
if(i % 2 !== 0) {
answer.push(i);
}
}
프로그래머스 문제 링크
02 중앙값 구하기
03 최빈값 구하기
04 짝수는 싫어요