본문 바로가기

전체 글

최소직사각형 알고리즘 feat. apply() 메서드 코딩테스트다. 자세한 문제는 아래와 같다. https://school.programmers.co.kr/learn/courses/30/lessons/86491 나의 답안으로 본격 들어가기 전에 문제에 대한 생각을 해보았다. 어떤 논리 과정을 거쳐야 문제의 답안을 도출할 수 있을까? 아래와 같은 명함 사이즈 배열이 있다고 하자. 이 모든 사이즈의 명함이 들어가는 가장 작은 명함지갑의 크기를 알아내는 것이다. size3 = [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] [14,4] 요소에서 14는 가로, 4는 세로길이다. 다른 요소들도 마찬가지다. 물론 명함을 돌리면 가로세로는 서로 바뀐다. 명함들은 길이를 보면 모두 직사각형이기 때문에 긴쪽 길이와 짧은 쪽 길이가 있다. .. 더보기
자연수가 하샤드 수인지 판별하는 알고리즘 문제는 역시 제목 그대로이다. 자세한 문제는 아래와 같다. https://school.programmers.co.kr/learn/courses/30/lessons/12947 나의 답안은 아래와 같다. function solution(x) { a = x.toString().split('').map(Number).reduce((acc, cur)=>acc+cur) return x % a===0 ? true : false; } x = 18 console.log(solution(x)) 이번 문제는 주차하고 집에 돌아오면서 생각해 보았는데 잘 떠올라 줘서 감사하다. 여러 메서드를 섞어 쓰게 되었는데 느낀 점은, 메서드를 잘 알면 정말 편하리라는 점이다. 복잡한 코드를 4분의1도 안되게 줄여 주고, 메서드 이름 덕분.. 더보기
자연수가 몇 번째 콜라프 작업에서 1이 되는지 파악하는 알고리즘 문제는 제목 그대로다. 만약 그 자연수가 500번째 콜라프 작업으로도 1이 되지 않는다면 함수는 -1을 반환해야 한다. 자세한 문제는 아래와 같다. https://school.programmers.co.kr/learn/courses/30/lessons/12943 재귀함수를 써야 할 거 같아서 1.5시간 이상 고생했으나 실패했다. 여기 while문으로 해결한 사례가 있어서 주석으로 파보았다. 코드는 거의 외운거 같다. function collatz(num) { var answer = 0 ; while(num !== 1 && answer < 500) { // answer 더보기
단어별로 짝수번째 index의 문자만 대문자로 만들기 알고리즘 이상한 문자 만들기라는 이름으로 문제가 올라와 있다. 자세한 문제내용은 아래 링크를 보면 된다. https://school.programmers.co.kr/learn/courses/30/lessons/12930?language=javascript 답안코드는 인터넷을 참고했으나 내가 주석했다. function solution(s){ var answer = ''; console.log(s.split(' ').map(i => i.split('') // 문자열을 공백 기준으로 나눠서 배열에 넣는다. -> 배열의 요소들을 i번째 요소부터 한글자 한글자 갈라서 또다른 배열에 넣는다. .map((j, idx) => j = idx % 2 === 0 ? j.toUpperCase():j.toLowerCase()) // 그.. 더보기
정규 표현식으로 숫자만 들어가는지 확인하기 자세한 문제는 아래 링크와 같다. 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 인 이유는 배열의 요소 하나하나를 사용해 함수를 실행하는 과정에서 사용.. 더보기