1. 피자 나눠 먹기 (3)
![](https://blog.kakaocdn.net/dn/wTYq9/btsBJaLsXIE/ZhzNqY48kY1Nm9vNSFsbK1/img.png)
정답
function solution(slice, n) {
return Math.ceil(n / slice)
}
풀이
어찌됐든 n명의 사람이 slice 조각 만큼 자른 피자를 한 조각 이상씩 먹어야 하므로 못 먹는 사람이 존재해선 안된다. 10명의 사람이 7조각으로 자른 피자를 먹는다고 가정했을 때 최소 2판이 필요하다. 이는 10/7 = 1.xx 가 나오게 될 것이다. 여기서 key point 는 1.xx 에서 Math.ceil 이라는 올림 메소드를 사용해 피자가 최소 몇판이 필요한지를 구할 수 있게 된다. 그러므로 답은 Math.ceil(n/slice)을 return 시켜주면 된다.
정리
올림 메소드: Math.ceil()
반올림 메소드: Math.round()
내림 메소드: Math.floor()
소수점 반올림 메소드: toFixed(), toPrecision()
2. 중복된 숫자 개수
![](https://blog.kakaocdn.net/dn/zlxqN/btsBGXToegV/fHy7csdHfng0fZet1E1kEK/img.png)
정답
function solution(array, n) {
return array.filter((a)=>a===n).length;
}
풀이
solution 함수를 호출할 때 [1, 1, 2, 3, 4, 5] 라는 배열과 1을 각각 array, n 이라는 매개변수로 보내준다고 가정하자. n이 1로 넘어왔으니까 1이라는 숫자의 개수를 배열안에서 찾아 return 시켜줘야 한다. 배열안에서 특정 조건을 찾아 반환받을 때는 filter() 함수가 적당해 보인다. array를 a의 매개변수로 담아 filter를 돌려주고 a===n 에 조건의 맞는 배열을 반환 시켜준다. return 값은 [1, 1] 이 나오게 될 것인데 우리가 구해야 할 것은 1의 개수 이므로 .length를 붙여줘 배열의 길이를 구해준다. 답은 array.filter((a)=>a===n).length를 return 시켜주면 된다.
정리
특정 조건의 배열을 return 받고 싶을 때에는 filter() 함수를 이용해보자
3. 최대값 만들기 (1)
![](https://blog.kakaocdn.net/dn/CXdPu/btsBC13YfQ8/o3ooXK3X3kkU8tmWSD1bTk/img.png)
정답
function solution(numbers) {
numbers.sort((a,b)=>b-a)
return numbers[0] * numbers[1];
}
풀이
배열안의 가장 큰 두 수의 값을 곱한 값을 구해주면 된다. 이는 배열안을 내림차순해 0번째와 1번째 index를 곱해주면 된다. 먼저 배열의 정렬을 위해 sort() 함수를 사용하였고 sort 안에서 배열을 내림차순을 해주기 위해 b-a를 리턴받아 큰값이 왼쪽으로 정렬되게 조건을 부여해 주었다. return 값으로 새로 내림차순 정렬된 numbers 배열의 numbers[0] * numbers[1] 을 해주면 정답이 나오게 된다.
정리
숫자 오름차순 정렬: arr.sort((a,b)=>a-b)
숫자 내림차순 정렬: arr.sort((a,b)=>b-a)
문자열 오름차순 정렬: arr.sort()
문자열 내림차순 정렬:
arr.sort((a,b)=>{
if(a < b) return 1;
if(a > b) return -1;
if(a === b) return 0;
})
4. 모음 제거
![](https://blog.kakaocdn.net/dn/eGspmI/btsBGocNAeI/dlPkXG8qPELk6Xo183sTy0/img.png)
정답
function solution(my_string) {
return my_string = my_string.replace(/[aeiou]/g,"");
}
풀이
my_string 이라는 문자열이 주어졌을 때 그 문자열의 a,e,i,o,u 가 포함되는지 확인하고 문자열에서 삭제를 시켜줘야 한다. 제일 먼저 떠오른 방법은 replaceAll을 사용해 공백으로 대체하는 방식이 떠올랐지만 a,e,i,o,u 를 전부 대체해야 하기 때문에 가독성이 떨어진다. 이를 한번에 하는 방법은 / /g 이다! /[aeiou]/g 를 replace에 넣어 문자열에서 a,e,i,o,u를 찾아 공백으로 치환해준다. replaceAll 과는 다르게 범위 및 다중 문자를 설정할 수 있어 여러개를 대체할 때 많이 쓰인다.
정리
다중 문자 및 범위 대체하기: replaceAll - > replace(/특정단어의범위/g, 바꿀단어)
5. 배열의 유사도
![](https://blog.kakaocdn.net/dn/cJxYB2/btsBCZd76Go/nfRR03DHVyvpxMBAh1ueKk/img.png)
정답
function solution(s1, s2) {
var answer = 0;
for (var i = 0; i < s1.length; i++){
for (var j = 0; j < s2.length; j++){
if(s1[i] === s2[j]) answer++;
}
}
return answer;
}
풀이
두 개의 배열이 같은 지를 비교할 땐 이중 for을 사용하면 쉽게 구할 수 있다. 이중 for문을 통해 인덱스에 있는 값들을 비교하고 같으면 answer에 +1 을 해줘 같은 값들의 개수를 구하였다.
정리
두 배열 비교 할때 -> 이중 for문
6. 피자 나눠 먹기
![](https://blog.kakaocdn.net/dn/Nyph0/btsBGuqohPz/RD1jqVuEK4Er5SPFQnek7k/img.png)
정답
function solution(my_string, letter) {
return my_string.replaceAll(letter,"");
}
풀이
길이가 1인 영문자를 특정 문자열에서 없애줘야 하므로 replaceAll 함수를 사용하면 쉽게 제거할 수 있다. replaceAll(letter,""); 을 해줘 길이가 1인 영문자를 공백으로 바꿔 주었다.
정리
길이가 1인 영문자를 문자열 안에서 제거 및 대체 해주고 싶을 땐 replaceAll을 사용한다.
7. 머쓱이보다 키 큰 사람
![](https://blog.kakaocdn.net/dn/54Izv/btsBG5juIW8/P07UwoqkrnK6M1Gcoi1huk/img.png)
정답
function solution(array, height) {
return array.filter((a) => a > height).length;
}
풀이
배열 안에서 특정 숫자인 height 보다 키가 큰 사람이 몇명인지 구해야 하므로 filter를 돌려 height 보다 a 매개변수가 큰 값의 배열을 반환 받고 그 길이를 구하면 되는 문제다.
정리
특정 배열을 filter 함수를 통해 조건을 매기면 원하는 배열을 리턴 받을 수 있다. 그 후 length를 통해 배열의 길이 또한 구할 수 있다.
8. 순서쌍의 개수
![](https://blog.kakaocdn.net/dn/Ate1A/btsBFF62kwT/ZLHzT1B4ZwrMt8SwyLBcNk/img.png)
정답
function solution(n) {
let index = 1;
let count = 0;
while(n >= index) {
if(n % index ===0) count++
index++
}
return count;
}
풀이
자연수 n 이 20이라고 가정하에 n의 공약수들의 공통적인 특징은 n % 공약수 === 0 이다. 그렇기 때문에 1부터 ~ 자연수 n 의 길이만큼 반복문을 돌려 나머지가 0인 값들만 구하면 된다. 하지만 문제는 공약수를 구하는 것이 아닌 공약수의 개수를 구하는 것이기 때문에 나머지가 0이라는 조건을 만족하면 count++ 을 해주고 반복문이 끝나면 count 를 return 하면 정답이 나오게 된다.
정리
while() 문을 통해 특정 자연수의 공약수를 구할 수 있다.
'Algorithms' 카테고리의 다른 글
프로그래머스 - 코딩테스트 입문 (3) (0) | 2023.12.11 |
---|---|
프로그래머스 - 코딩테스트 입문 (0) | 2023.12.09 |