본문 바로가기

알고리즘 코딩

정규 표현식으로 숫자만 들어가는지 확인하기 자세한 문제는 아래 링크와 같다. https://school.programmers.co.kr/learn/courses/30/lessons/12918 처음에 isNaN() 메서드를 사용했었는데, 이걸로 숫자로만 이뤄져 있는지 확인하면 소수점이 달린 수 또한 숫자로 보아 소수점 포함 6개의 자리수가 있으면 숫자로 보게 된다. 예를 들어 4.4412 도 . 을 포함해 6개의 문제로 이뤄져 있으니 결국 true를 리턴하게 된다. 이 문제를 해결하기 위해 구글링 해보았다. 우여곡절 끝에 인터넷에서 찾은 코드는 아래와 같다. 자세한 내용은 주석 달았으니 참고 바란다. function solution(s) { answer = (s.length===4 || s.length===6) && /^[0-9]*$/.test(s.. 더보기
배열 2개의 내적 구하는 알고리즘 feat. reduce(acc, _, i) 내적이란 단어는 생소하지만 문제에 대한 자세한 설명은 아래 링크에 있다. https://school.programmers.co.kr/learn/courses/30/lessons/70128 아래는 나의 답안이다. function solution2(a, b) { var answer = 0; for(let i =0; i < a.length; i++) { answer = answer + a[i]*b[i] } console.log(answer); return answer; } a = [-1,0,1] b = [1,0,-1] solution2(a,b) 참 쉽다 쉬워~ 이러면서 풀었는데 reduce(acc, ___, i) 라는 메서드를 써서 만든 답안을 보고 깜짝 놀랐다. 답안은 아래와 같다. 내가 상세한 주석을 덧붙.. 더보기
나누어 떨어지는 숫자들로만 배열을 만드는 알고리즘 문제는 제목 그대로다. 자세한 문제 출처는 아래와 같다. https://school.programmers.co.kr/learn/courses/30/lessons/12910 일단 나의 코드는 아래와 같았다. function solution(arr, divisor) { var answer = []; arr.map((element) => { if(element % divisor === 0) { answer.push(element) } }) if(answer.length===0) { answer.push(-1) } answer.sort((a,b) => a-b) return answer; } 복잡하다. 그리고 모범답안? 을 보고 내가 쳐본 코드는 아래와 같다. filter () 메서드를 사용했다는 점이 포인트다... 더보기
배열의 모든 요소의 값의 평균을 구하는 알고리즘 이 문제도 제목 그대로다. 자세한 문제는 아래 링크 참조바란다. https://school.programmers.co.kr/learn/courses/30/lessons/12944 순도 99% 나의 답안이라고 봐야겠다. 아래와 같다. 자세한 내용은 주석 참조바란다. function solution(arr) { var answer = 0; answer = (arr.reduce((acc, cur) => acc + cur))/arr.length; // arr 의 첫번째 요소부터 acc에 넣고 두번째 요소는 cur에 들어간다. 그 둘을 더한다. 더한 결과를 또다시 acc에 넣고 그 다음 요소를 더한다. // [번외] 메서드 이름이 reduce 인 이유는 배열의 요소 하나하나를 사용해 함수를 실행하는 과정에서 사용.. 더보기
두 정수 사이에 있는 정수들의 합을 구하는 알고리즘 제목과 같은 코딩테스트 문제이다. 자세한 내용은 아래와 같다. https://school.programmers.co.kr/learn/courses/30/lessons/12912 나의 순도 99% 답안은 아래와 같다. 자세한 내용은 주석 참조. function solution(a, b) { var answer = 0; // 일단 answer는 0 이다. if(a 더보기
문자열의 가운데 글자를 가져오는 알고리즘 제목 그대로다. 문제는 아래 링크와 같다. https://school.programmers.co.kr/learn/courses/30/lessons/12903 내가 작성한 버전이다. function solution(s) { var answer = ''; answer = s.length % 2 === 0 ? // 문자열 s의 문자개수가 짝수라면 : 앞의 것을 answer에 넣는다. s.slice(s.length/2-1, s.length/2+1) : // slice 메서드로 가운데 2개의 문자열 추출한다. s[Math.floor(s.length/2)] // s의 문자개수가 홀수라면 s.length/2를 하면 n.5 가 나온다 // floor 메서드로 내림하여 가운데 문자열의 순서를 찾는다. console.lo.. 더보기
사용자가 입력한 대로 반복해서 별을 출력해주는 알고리즘 (내가한 버전) 간단한 알고리즘 문제를 풀어 봤다. 문제는 아래 링크 참조 바란다. https://school.programmers.co.kr/learn/courses/30/lessons/12969?language=javascript 이전에 같은 문제를 포스팅한 적이 있다. 이번 포스팅에서는 나름대로 내가 풀어 봤다. 인터넷 내용은 50% 정도 훑어보았다. 답안을 뇌에 50%정도 흘려 주었다고 할 수 있겠다. 답안 보기 싫다고 구글링을 안할 수도 없고 기억을 삭제할 수도 없는 일이다. 바로 나의 답안을 올려 본다. 이쯤 주석처리를 하면 언제든 다시 볼 수 있을 것 같다. 반복문 중첩되니 쪼금 들여다 볼 필요는 있다. process.stdin.setEncoding('utf8'); process.stdin.on('data'.. 더보기
사용자가 입력한 대로 반복 해서 별을 출력해주는 알고리즘 (인터넷 버전) 간단한 알고리즘 문제를 풀어 봤다. 문제는 아래 링크 참조 바란다. https://school.programmers.co.kr/learn/courses/30/lessons/12969?language=javascript 간단한 문제이니 바로 답안 코드를 제시하는 게 좋겠다. repeat 메서드를 기억하자. 이건 아쉬우니 나만의 for 문으로도 만들어 봐야겠다. process.stdin.setEncoding('utf8'); process.stdin.on('data', data => { const n = data.split(" "); const a = Number(n[0]), b = Number(n[1]); for (let i = 0; i < b; i++){ console.log(`${'*'.repeat(a).. 더보기