본문 바로가기

Javascript/자바스크립트 문제193

[Javascript : programmers] 문자열 내 p와 y의 개수 (Lv.1) [Javascript : programmers] 문자열 내 p와 y의 개수 (Lv.1) 문제 나의 정답 풀이function solution(s){ let p=0, y=0; [...s.toLowerCase()].map(v=>v=='p' ? p++ : v=='y' ? y++ : 0); return p==y ? true : false;} 소문자로 바꾼 s 문자열에 대해 각 문자가 p, y 인 경우 각각 p, y 변수에 ++ 하고 그 개수를 비교하여 T/F를 반환한다. 다른 사람 풀이function numPY(s){ return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;} p와 y로 split 한 원소의.. 2024. 9. 3.
[Javascript : programmers] 옹알이 (1) (Lv.0) [Javascript : programmers] 옹알이 (1) (Lv.0) 문제 나의 정답 풀이function solution(babbling) { let words = ["aya", "ye", "woo", "ma"]; for(let w of words){ babbling = babbling.map(v=>v.replace(w," ")); } return babbling.filter(e=>!e.trim()).length;} babbling 배열의 원소를 돌면서 "aya", "ye", "woo", "ma" 를 " "  로 바꾼다.바꾼 문자열의 앞뒤 공백을 없앤 길이가 0인 것들을 추출하여 그 길이를 반환한다. 새로 배운 풀이function solution(babbling) .. 2024. 8. 31.
[Javascript : programmers] 정수를 나선형으로 배치하기 (Lv.0) 💥💥 [Javascript : programmers] 정수를 나선형으로 배치하기 (Lv.0) 💥💥 문제 이 문제는 풀지 못했고, 다른 사람의 풀이를 통해서 알고리즘을 학습하기로 한다. 다른 사람 풀이function solution(n) { let answer = new Array(n).fill().map(()=>new Array(n).fill(0)); const move = [[0, 1], [1, 0], [0, -1], [-1, 0]]; let x = 0, y = 0, dir = 0, num = 1; while(num = n || nextX = n || nextY  풀이 학습1) n * n 까지 넣을 n * n 의 이차원 배열과 이차원 배열의 인덱스에 따라 상하좌우로 움직일 move .. 2024. 8. 31.
[Javascript : programmers] 평행 (Lv.0) [Javascript : programmers] 평행 (Lv.0) 문제 나의 정답 풀이function solution(dots) { let [d1, d2, d3, d4] = dots; return +(equaled(d1,d2,d3,d4) || equaled(d1,d3,d2,d4) || equaled(d1,d4,d2,d3));}function equaled(a,b,c,d){ let slope1 = (b[1] - a[1]) / (b[0] - a[0]); let slope2 = (d[1] - c[1]) / (d[0] - c[0]); return slope1 == slope2;} dots의 길이는 항상 4이기 때문에 equaled 함수로 비교할 경우의 수는 3가지라는 점이 핵심이다.d.. 2024. 8. 31.
[Javascript : programmers] 겹치는 선분의 길이 (Lv.0) [Javascript : programmers] 겹치는 선분의 길이 (Lv.0) 문제 나의 정답 풀이function solution(lines) { let checked = new Array(201).fill(0); for(let [s,e] of lines) for(let i=s+100; ie>=2).length;} -100부터 100까지인 201개의 배열을 만들고 lines를 for문으로 돌면서 100을 더한 lines의 범위만큼 1씩 추가한다.이 배열에서 겹치는 선분인 원소의 값이 2이상인 원소들을 추출한 길이를 반환한다. 2024. 8. 31.
[Javascript : programmers] 안전지대 (Lv.0) 💥 [Javascript : programmers] 안전지대 (Lv.0) 💥 문제 나의 정답 풀이function solution(board) { let n = board.length; let danger = [[-1,0],[-1,1],[-1,-1],[0,1],[0,-1],[1,1],[1,0],[1,-1]]; for(let i=0; i { if(x+i>=0 && x+i=0 && y+jacc+=cur.filter(e=>e==0).length,0);} 위험한 지역은 상하좌우, 대각선 모두 +1/-1 을 해줘야 하기 때문에 위험지역을 나타내는 8 구역을 2차원 배열로 저장한다.n*n 의 board 배열을 이중 for문으로 돌면서 원소의 값이 1이라면, danger.. 2024. 8. 31.
[Javascript : programmers] 연속된 수의 합 (Lv.0) [Javascript : programmers] 연속된 수의 합 (Lv.0) 문제 나의 정답 풀이function solution(num, total) { let start = Math.ceil(total/num - Math.floor(num/2)); return new Array(num).fill(start).map((v,i)=>v+i);} 연속된 숫자의 첫번째 값을 구하는 것이 핵심이다. 첫번째 값은 합총 개수의 Math.ceil(total/num - Math.floor(num/2)) 과 같다.첫번째 값부터 1개씩 늘린 n 칸의 배열을 반환한다. 2024. 8. 31.
[Javascript : programmers] 특이한 정렬 (Lv.0) 💥 [Javascript : programmers] 특이한 정렬 (Lv.0) 💥 문제 나의 정답 풀이function solution(numlist, n) { return numlist.sort((a,b)=>Math.abs(n-a) - Math.abs(n-b) || b-a);} n 을 기준으로 가까운 수를 정렬하는 것은 Math.abs(n-a) - Math.abs(n-b) 를 기준으로 sort하는 것이 핵심이다.  또한 이렇게 정렬했을 때 거리가 동일하면 큰 수가 더 앞으로 와야하기 때문에 앞의 조건이 0으로 거짓이라면 내림차순 정렬을 수행한다. 즉, Math.abs(n - a) - Math.abs(n - b) == 0 (false)이면 || 뒤의 조건(b - a)이 동작하도록 한다 2024. 8. 30.
[Javascript : programmers] 다음에 올 숫자 (Lv.0) [Javascript : programmers] 다음에 올 숫자 (Lv.0) 문제 나의 정답 풀이function solution(common) { if(common[1]-common[0] == common[2]-common[1]) return common[common.length-1] + common[1]-common[0]; else return common[common.length-1] * common[1]/common[0]} common은 무조건 등비/등차 수열이라는 점이 핵심이다. common의 1번-0번 과 2번-1번의 값이 같다면 등차수열이고 아니면 등비수열이다.등차수열이라면 마지막 원소에 등차를 더해 반환하고 등비수열이라면 마지막 원소에 등비를 곱해 반환한다. 2024. 8. 30.
[Javascript : programmers] OX퀴즈 (Lv.0) [Javascript : programmers] OX퀴즈 (Lv.0) 문제 나의 정답 풀이function solution(quiz) { let quizs = quiz.map(v=>v.split(" ").filter(e=>!e.includes("="))); let answers = quizs.map(v=>v[1] == "+" ? parseInt(v[0]) + parseInt(v[2]) : parseInt(v[0]) - parseInt(v[2])) return quizs.map((v,i)=>v[3] == answers[i] ? "O" : "X")}  quiz 배열을 " " 공백을 구분자로 나누고 "=" 을 제외하고 모두 새로운 배열 quizs에 넣는다.quizs 를 돌면서 1번 인덱스가 +/.. 2024. 8. 30.
[Javascript : programmers] 배열 조각하기 (Lv.0) [Javascript : programmers] 배열 조각하기 (Lv.0) 문제 나의 정답 풀이function solution(arr, query) { for(let i=0; i query 배열을 돌면서 그 인덱스의 홀/짝에 따라 arr 배열을 슬라이싱한다. 2024. 8. 30.
[Javascript : programmers] 코드 처리하기 (Lv.0) [Javascript : programmers] 코드 처리하기 (Lv.0) 문제 나의 정답 풀이function solution(code) { let mode = 0; let ret = ""; for(let i=0; i code 가 "1" 일 때와 아닐 때로 나누어 "1" 이면 mode 를 바꾸고 "1"이 아니고 인덱스 홀/짝에 대해 code[i] 를 추가한다. 2024. 8. 30.
[Javascript : programmers] 다항식 더하기 (Lv.0) [Javascript : programmers] 다항식 더하기 (Lv.0) 문제 나의 정답 풀이function solution(polynomial) { let xnum = polynomial .split(' + ').filter(e=>e.includes('x')) .map(v=>v.replace('x','') || '1') .reduce((acc,cur)=> acc+=parseInt(cur), 0); let num = polynomial .split(' + ').filter(e=>!isNaN(e)) .reduce((acc,cur)=> acc+=parseInt(c.. 2024. 8. 30.
[Javascript : programmers] 문자열 밀기 (Lv.0) ⭐ [Javascript : programmers] 문자열 밀기 (Lv.0) ⭐ 문제 나의 정답 풀이function solution(A, B) { let count = 0; for(let i=0; i A를 슬라이싱을 통해서 제일 뒤에 문장을 앞으로 가져왔고 그 문장과 B를 비교하여 count 를 추가했다.이렇게 for 문을 도는 동안 return 이 안나왔다면 없는 것이기 때문에 -1을 반환한다. 다른 사람 풀이 ⭐let solution=(a,b)=>(b+b).indexOf(a) 문자열 B를 2개 이어놓은 문장에 대해서 A 문자열이 있는 인덱스를 찾아 반환한다. 문제의 예시 hello 를 예시로 들면, ohellohell 의 문자열에서 hello의 문자열은 1번째에 있다.방법에 대한 설명은 아래 .. 2024. 8. 30.
[Javascript : programmers] 유한소수 판별하기 (Lv.0) [Javascript : programmers] 유한소수 판별하기 (Lv.0) 문제 나의 정답 풀이const gcd = (num1, num2) => (num2 > 0 ? gcd(num2, num1 % num2) : num1);function solution(a, b) { b = b/gcd(a,b); let arr = []; let div = 2; while(b>=2){ if(b%div==0){ arr.push(div); b /= div; }else div++; } return arr.join('').replace(/[25]/g, '').length ? 2 : 1;} 유클리드 호제법에 의한 최대공약수 함수 gc.. 2024. 8. 29.