Javascript 오답노트 04
Javascript 오답노트 정리 네 번째 시간입니다.
2022년 10월 21일 프로그래머스 1단계 10문제 쪽지시험을 봤습니다.
간만에 봐서 그런지(?) 거의 다 틀렸네요
01. 다음의 결괏값을 작성하시오.
{
const arr = [1,1,3,3,0,1,1];
function solution(arr){
return arr.filter((item,idx) => item !== arr[idx+1]);
}
console.log(solution(arr))
}
filter 메서드를 이용한 중복제거에 대한 문제입니다.
idx 인덱스값 0부터 넣고 비교해보면
1은 arr[1](1)과 같으니 뺍니다.
1은 arr[2](3)과 다르니 넣습니다.
3은 arr[3](3)과 같으니 뺍니다.
3은 arr[4](0)과 다르니 넣습니다.
0은 arr[5](1)과 다르니 넣습니다.
1은 arr[6](1)과 같으니 뺍니다.
1은 arr[7](?)와 다르니 넣습니다.?
위 과정을 거치면 반환되는 배열값은 [1, 3, 0, 1]이 나옵니다.
정답 확인하기
02. 다음의 결괏값을 작성하시오.
{
const arr = "webstoryboy";
function solution(s) {
const answer = "";
return s.length % 2 == 1 ? s[s.length/2 | 0] : s.slice(s.length/2 -1, s.length/2 +1);
}
console.log(solution(arr))
}
삼항연산자를 이용한 문자열 가운데 영어 찾기유형 문제입니다.
11 % 2 = 1이 true이므로 s[s.length/2 | 0]로 진행합니다.
11 / 2 = 5.5 + 0 = 5.5가 나와서? s[5]의 값은 o가 됩니다.
정답 확인하기
03. 다음의 결괏값을 작성하시오.
{
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function solution(numbers){
var answer = 0;
for(let i =0; i<numbers.length; i++){
answer = answer + numbers[i]
}
answer = answer/numbers.length;
return answer;
}
console.log(solution(arr));
}
for문을 이용해서 평균을 구하는 문제 유형입니다.
i는 0 부터 대입해서 9까지 해보면
i = 0 , 0+1
i = 1 , 1+2
i = 2 , 3+3
...
i = 9 , 45+10
55/10 = 5.5가 나옵니다.
덧셈을 못해서 틀렸네요 ㅜㅜ
정답 확인하기
06. 다음의 결괏값을 작성하시오.
{
const num = "webstoryboy";
function solution(s) {
let answer;
let arr = [...s]
if(arr.length % 2 == 0) {
answer = arr.splice(arr.length/2-1, 2);
} else {
answer = arr.splice(Math.floor(arr.length/2), 1);
}
return answer.join("");
}
console.log(solution(num))
}
splice 와 join 메서드를 사용한 가운데찾기 문제유형입니다.
webstoryboy값을 s로 받아와 펼침연산자로 배열안에 값을 저장해줍니다.
11 % 2 = false 이므로 else로 진행합니다.
arr.splice(5,1)의 값은 o가나옵니다.
정답 확인하기
07. 다음의 결괏값을 작성하시오.
{
const num = [5, 9, 7, 10];
function solution(arr, divisor) {
var answer = [];
for(i=0; i<arr.length; i++){
if(arr[i] % divisor ==0) answer.push(arr[i]);
}
return answer;
}
console.log(solution(num, 5))
}
for문 push에 대한 문제입니다.
0부터 3까지대입해보면 조건에 맞을때는 i= 0 , i= 3일때 조건을 만족하므로 배열끝에 push해줍니다.
순서대로 넣어주면 답은 [5, 10]가 나옵니다.
정답 확인하기
08. 다음의 결괏값을 작성하시오.
{
const num = [5, 9 ,7, 10];
function solution(arr) {
let sm = arr[0], index = 0;
for(i=0; i<arr.length; i++){
if(arr[i] < sm) {
sm = arr[i];
index = i;
}
}
arr.splice(index, 1);
return arr;
}
console.log(solution(num))
}
for문과 splice를 이용해서 제일 작은수를 제거해주는 문제 유형입니다.
sm은 5, index는 0으로 시작합니다.
i에 0~3 대입시 모두 false가 나오므로 index값은 그대로 0이되고 arr.splice(0,1)의 값은 [9, 7, 10]가 됩니다.
정답 확인하기
09. 다음의 결괏값을 작성하시오.
{
const num = "webstoryboy";
function solution(s) {
let answer = s.split("");
for(i=0; i<answer.length-4; i++){
answer[i] = "*";
}
return answer.join("");
}
console.log(solution(num))
}
split과 join메서드의 개념을 묻는 문제입니다.
먼저 split 메서드를 이용해서 매개변수로 받아온 webstrybody를 쪼개서 배열안에 넣어줍니다.
for문에 의해 0~7번째 자리는 *로 차게 되어 ['*', '*', '*', '*', '*', '*', '*', 'y', 'b', 'o', 'y']가 됩니다.
여기서 join 메서드를 거치면 *******yboy가 됩니다.
정답 확인하기
10. 다음의 결괏값을 작성하시오.
{
function solution(arr1, arr2){
let answer = [];
arr1.sort();
arr2.sort();
let p1 = p2 = 0;
while(p1 <0 arr1.length && p2 < arr2.length){
if(arr1[p1] == arr2[p2]){
answer.push(arr1[p1++]);
p2++;
}
else if(arr1[p1] < arr2[p2]) p1++;
else p2++;
}
return answer;
}
let a=[1,3,9,5,2];
let b=[3,2,5,7,8];
console.log(solution(a,b));
}
중복되는 문자 찾기 유형입니다.
sort로 오름차순 정렬을 시킵니다
a배열과 b배열을 비교해서 p1 p2를 증가시키면서 push로 넣어주며 계속 돌리면 답이 [2,3,5]가 나옵니다.
이 문제는 아직 잘 모르겠네요..
10번 쌤이 뭐 바꾸라고 하신거 같은데 아시는분 제보 바랍니다.
정답 확인하기
틀린점은 알려주시면 감사하겠습니다!!
오늘도 반타작에 실패한 저는 문제를 만들러 갑니다...
'오답 노트' 카테고리의 다른 글
Javascript 오답 노트 03 (4) | 2022.10.06 |
---|---|
Javascript 오답 노트 02 (4) | 2022.10.02 |
Javascript 오답 노트 01 (3) | 2022.10.02 |
댓글