2차 공부/알고리즘 34

콜라문제

3가지 인수를 받는다. 가진 병의 개수n, 특정 개수마다 바꿔주는 a, a만큼 받으면 특정개수만큼 돌려주는 b세가지 인수를 통하여 교환동안 받은 콜라의 합을 구하는 것이 문제의 핵심이다.  먼저 작성한 코드function solution(a, b, n) { var answer = 0; let flag = false; for (let i = n; i>=a; i/=a){ let remain = i%a answer += Math.floor(i/a) i += remain if (i> a){ flag = true } else { flag = false } } ..

시저암호

작성한 코드function solution(s, n) { let upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' let lower = 'abcdefghijklmnopqrstuvwxyz' var answer = ''; for (let i = 0; i= targetArr.length) targetIndex -= targetArr.length answer += targetArr[targetIndex] } return answer;} 원래 split()을 사용하여 배열화 시킨 뒤 진행하려 하였는데, 알파벳의 순서에 따라 바꿔야 하는점과 사이사이에 띄어쓰기가 포함될 경우를 예외처리 하기 어려워 문자열 연산으로 풀이하였따. continue..

문자열 다루기 기본

먼저 작성한 코드function solution(s) { return (s.length===4 && !isNaN(Number(s))) ||(s.length===6 && !isNaN(Number(s))) ? true : false}11번 케이스에서 오류가 발생하였다.이유를 모르겠어서 힌트를 보니, 지수표기법으로 들어오는 문자열을 js에서 숫자로 인식하기 때문에 발생한 오류였다.예를들어 10e01 같은 수가 들어올 때에 대한 문제이다.문제에서 "숫자로만 구성"이라는 제한조건이 있기 때문에 e같은 문자열의 경우 아예 예외를 두어야 한다. 후에 작성한 코드function solution(s) { if (s.includes('e')) { return false } else..

자연수 뒤집기

내가 작성한 코드function solution(n) { var answer = []; for (let i = String(n).length-1; i>=0; i--) { answer.push(Number(String(n).split('')[i])) } return answer;}반복문을 사용해 인덱스가 큰 번호부터 0번까지 배열에 push하도록 작성하였다.  다른사람이 작성한 코드function solution(n) { return (n + '').split('').reverse().map(n => parseInt(n));}n+''으로 문자열로 바꾼 뒤 split메서드를 활용해 배열로 바꾸고reverse()메서드를 사용하여 뒤집은 뒤 map메서드로 각 요소를 숫자화..

배열의 평균값

내가 작성한 코드function solution(numbers) { let answer = 0; numbers.map(x=> answer+=x) return (answer/numbers.length).toFixed(1)}map 함수를 사용하여 기존에 선언한 변수 answer에 각 요소를 더하도록 작성하였다.그리고 return에서 평균값을 구해주고, toFixed()를 사용하여 소수점 1자리까지 표시하도록 작성하였다. function solution(numbers) { return numbers.reduce((a,b) => a+b, 0)/numbers.length;}reduce 메서드를 사용하면 더 간단하게 표현할 수 있다.reduce는 배열의 값을 더하거나 곱할 때 사용한다.위 코드..

짝수의 합

내가 쓴 코드function solution(n) { let answer = 0; for (let i=0; i반복문과 조건문을 활용하여 짝수일때만 변수에 더하도록 설정하였다. 다른사람이 작성한 코드function solution(n) { var answer = 0; for(let i=2 ; i반복문만을 활용하여 i가 2부터 시작해 짝수로만 증가하게하고 n까지 비교하여 더하도록하였다.내가 작성한 코드는 반복문도 두배에 매 반복마다 조건을 검사해야했는데, 이렇게 짝수로만 반복문을 사용하면연산시간을 엄청나게 줄일 수 있다.

두 수의 나눗셈

내가 작성한 코드function solution(num1, num2) { return Math.floor(num1/num2*1000);}Math.floor()을 이용해 내림을 사용하여 알고리즘을 풀어냈다.하지만 floor은 '버림'이 아닌 '내림'이므로 음수값이 출력되었을 때 틀리게 나온다.따라서 Math.trunc()의 '버림' 기능을 사용하는 것이 알맞다. 예를들어 num1이 -3, num2가 2일 때 -3/2는 -1.5이다.여기서 문제는 정수 부분만 원하므로 -1이 나와야하지만, 음수에서의 내림은 0방향에서 먼쪽으로 내리므로Math.floor()을 사용하게되면 -2가 나온다. 따라서 Math.trunc()를 사용하여 -1을 도출해내는 것이 알맞다. 알맞은 코드function solution(n..

덧셈식 출력하기

내가 작성한 코드const readline = require('readline');const rl = readline.createInterface({ input: process.stdin, output: process.stdout});let input = [];rl.on('line', function (line) { input = line.split(' ');}).on('close', function () { console.log(`${Number(input[0])} + ${Number(input[1])} = ${Number(input[0])+Number(input[1])}`);});백틱을 사용하여 원하는 출력형태로 출력하도록 작성하였다.깔끔하진 않다고 생각한다.  다른사람이 작성한..