1. 중앙값 구하기
![](https://blog.kakaocdn.net/dn/cn5lqN/btsBKl0B1fH/sFHuejkl86fXs7km38YBmk/img.png)
정답
function solution(array) {
return array[Math.floor(array.sort((a,b)=>b-a).length/2)];
}
풀이
배열안의 값을 크기의 순서대로 정렬 했을 때 중앙값을 구해야 하므로 우선 sort를 이용해 array를 내림차순 이나 오름차순 정렬 해준다. 그 후 배열의 길이를 2로 나누고 Math.floor 메소드를 이용해 값을 내림 해준다. 그 내림한 값은 array 의 index 번호로 들어가게 되고 중앙값을 리턴하게 된다.
정리
어떠한 배열의 중앙값을 구할 때는 배열안의 값들을 정렬해준 뒤 중앙값을 구하면 쉽게 구할 수 있다.
2. 문자 반복 출력하기
![](https://blog.kakaocdn.net/dn/babB78/btsBGXMN702/TlbJCyj5EK4ngxC4oaVnS0/img.png)
정답
function solution(my_string, n) {
let arr = my_string.split("")
let result = arr.map((e)=>e.repeat(n)).join("")
return result;
}
풀이
my_string에 들어있는 각 숫자들을 n번만큼 반복해서 출력을 해줘야 한다. 우선 my_string 값들을 split 함수를 이용해 배열 형태로 만들어주고 map 함수를 돌리게 된다. map 함수 안에서는 repeat함수를 이용해 n번 만큼 배열들을 반복해주고 join 함수로 배열을 string 형태로 변환 시켜준다.
정리
어떠한 작업을 n번만큼 반복하고 싶을 때 에는 repeat() 함수를 이용하면 반복시켜줄 수 있다.
3. 자릿수 더하기
![](https://blog.kakaocdn.net/dn/bw7nOV/btsBKeAoxBR/OC9HqaQ2W0bnuTKmvrXsL0/img.png)
정답
function solution(n) {
let str= String(n);
let arr = str.split("");
let sum = 0;
for(let i=0; i<arr.length;i++){
sum += Number(arr[i]);
}
return sum;
}
풀이
정수 n이 매개변수로 주어질 때 n의 각 자리의 숫자의 합을 구해야 하는 문제이다. 우선 n의 각 자리를 구분 짓기 위해 toString() 함수로 n을 문자형태로 변환 시켜주고 split 함수를 이용해 배열형태로 만들어 준다. 그 후 for 문을 돌려 배열 들의 index 값들을 Number() 형태로 변환 시켜준 뒤 변수 sum에 더해준다.
정리
숫자를 문자 형태로 변환 = String(num)
문자를 숫자 형태로 변환 = Number(str)
4. 숨어있는 숫자의 덧셈 (1)
![](https://blog.kakaocdn.net/dn/XEUtK/btsBFdJS6Hw/nXQkLlDrKUKaSXFGELgBz1/img.png)
정답
function solution(my_string) {
let regex = /[^0-9]/g
let filterNum = my_string.replace(regex,"")
let arr = filterNum.split("")
let answer = arr.reduce((acc,curr)=> Number(acc) + Number(curr))
return answer;
}
풀이
my_string 이라는 문자열에 replace를 돌려 0-9 까지가 아닌 숫자를 ""으로 치환한다. 이때 [^0-9] 에서 ^ 은 ~을 제외하고 라는 뜻이기 때문에 0-9 만 뽑을 수 있게 되는 원리이다. 그 후 필터된 숫자들을 split 으로 배열 형태로 만들어 주고 reduce 함수를 써서 값들을 더해준다.
정리
/[^0-9]/g = 문자열중 0~9까지의 숫자를 제외한 나머지
reduce() = 특정 숫자부터 특정 숫자까지 더할 때 자주 쓰임
5. 문자열안에 문자열
![](https://blog.kakaocdn.net/dn/5v4Vd/btsBC2B4P1F/F0o69Ql5VYZRTvdszIGeok/img.png)
정답
function solution(str1, str2) {
let num = 0;
str1.search(str2) === -1 ? num = 2 : num = 1
return num;
}
풀이
str1 문자열에서 str2를 search 했을 때 일치하는 값이 나오면 일치하는 값의 index를 반환 받게 된다. 이때 일치하는 값이 없으면 -1이 나오게 되므로 삼항연산자를 이용해 -1일 경우 return 값 2(존재x), 아닐 경우 1(존재o)을 num에 넣게 된다.
정리
search() 함수의 쓰임
6. 제곱수 판별하기
![](https://blog.kakaocdn.net/dn/ccNTwW/btsBGVIbT0J/3V74wimA4XtKWjM7vBiQK1/img.png)
정답
function solution(n) {
const sqrt = Math.sqrt(n);
return Number.isInteger(sqrt) ? 1 : 2;
}
풀이
Math.sqrt 메소드는 숫자를 넣었을 때 루트를 씌워준 값을 반환 시켜준다. 이때 문자가 들어가더라도 "144" 이런 형태라면 문자열을 숫자로 자동으로 바꿔줘 12가 나오게 된다. 하지만 한글이나 영어가 포함되면 NaN 값을 반환 받게 된다. 루트를 씌워 반환 받게된 숫자를 sqrt 변수에 담아주고 sqrt를 isInteger 메소드로 정수인지 판별 후 정수이면 1 아니면 2를 return 받는다.
정리
Math.sqrt() 메소드 활용법
정수인지 판별하는 방법 = isInteger() 메소드
7. 점의 위치 구하기
![](https://blog.kakaocdn.net/dn/Dlk3c/btsBCtGwylC/Pa9j9WRSnzklARfLy5gk6k/img.png)
정답
function solution(dot) {
let result = 0;
if(dot[0] > 0 && dot[1] > 0) result = 1;
else if(dot[0] < 0 && dot[1] > 0) result = 2;
else if(dot[0] < 0 && dot[1] < 0) result = 3;
else if(dot[0] > 0 && dot[1] < 0) result = 4;
return result;
}
풀이
매개변수로 받은 [x , y] 에서 x와 y 의 양수 음수를 판별해 몇 사분면에 있는지 구하는 문제이다. 0, 1 번째 index가 양수인지 음수인지 판별하는 조건문을 걸어 몇 사분면인지 구할 수 있다.
정리
and 연산자(&&)를 통해 둘의 조건에 만족하는 값을 구할 수 있다.
8. 대문자와 소문자
![](https://blog.kakaocdn.net/dn/bsgEg3/btsBKgLAaHx/MyblvcZ9gjlR57Tj2pT4Kk/img.png)
정답
function solution(my_string) {
let arr = my_string.split("");
return arr.map((a)=> a === a.toLowerCase() ? a.toUpperCase() : a.toLowerCase()).join("");
}
풀이
"cccCCC" 라는 문자열이 my_string 이라는 매개변수로 들어오면 "CCCccc" 로 대 소문자를 변환시켜서 리턴시켜줘야 한다. 그러기 위해 문자열을 하나 하나 필터를 해야 하기 때문에 split() 함수를 이용해 배열 형태로 만들어준다. 이때 split("") 처럼 스플릿 안을 공백으로 두어 문자열을 각각 , 를 붙여줘 배열 형태로 만들어 준다. 새로 split 된 배열을 map 함수를 이용해 a 의 매개변수로 받고 매개변수 a 와 소문자로 만든 a를 비교해 일치하면 소문자를 대문자로 일치하지 않으면 대문자를 소문자로 바꿔주는 삼항 연산자를 이용한다. 그 후 변환이 끝난 배열은 join("") 을 이용해 문자열로 바꿔준다.
정리
split 과 map 과 삼항연산자와의 조합 그리고 toLowerCase와 toUpperCase의 대 소문자 변환
'Algorithms' 카테고리의 다른 글
프로그래머스 - 코딩테스트 입문(2) (0) | 2023.12.09 |
---|---|
프로그래머스 - 코딩테스트 입문 (0) | 2023.12.09 |