알고리즘 공부 1일 차 (1)
공부할 것
reduce()
1. 직사각형 별찍기
문제 설명
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
제한 조건
n과 m은 각각 1000 이하인 자연수입니다.
문제
process.stdin.setEncoding('utf8'); process.stdin.on('data', data => {//받은 숫자를 data로 받는다 const n = data.split(" ");//data를 배열로 만든다 const a = Number(n[0]), b = Number(n[1]);//a는 세로길이 b는 가로 길이 console.log(a); console.log(b); });
해결
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++){ let str='' for(let j=0;j<a;j++){ str +='*' } console.log(str) } });
2. 홀수와 짝수
문제 설명
정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
제한 조건
num은 int 범위의 정수입니다.
0은 짝수입니다.
해결
function solution(num) { let answer = ''; if(num%2===0){ answer='Even' }else{ answer='Odd' } return answer; }
삼항연산자를 써서 코드를 줄여보았다.
//0은 false이고 1은 true다. function solution2(num){ let answer = num%2? 'Odd':'Even'; return console.log(answer); }
3. 가운데 글자 가져오기
문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
제한 조건
s는 길이가 1 이상, 100이하인 스트링입니다
해결
function solution(s) { let answer = ''; if(s.length%2===0){ answer=s[s.length/2-1]+s[s.length/2]; }else{ answer=s[s.length/2-0.5]//내림 함수? Math.floor() } return answer; }
substring 쓰기
function solution(s) { let answer = ''; let center =Math.floor(s.length/2) console.log(center) if(s.length%2===0){ answer=s.substring(center-1,center+1); }else{ answer=s.substring(center,center+1) } return answer; }
참고
올림(Math.ceil())
내림(Math.floor())
반올림(Math.round())
소수점 반올림 (toFixed(), toPrecision())
4. 두 정수 사이의 합
문제 설명
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
제한 조건
a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
a와 b의 대소관계는 정해져있지 않습니다.
해결
function solution(a, b) { //a와 b중 어느 게 큰지 모른다고 이렇게 너절하게 나누다니ㅠㅠ let answer = 0; if(a<b){ for(let i=a; i<=b; i++){ answer+=i; } }else if(a>b){ for(let i=b; i<=a; i++){ answer+=i; } }else{ answer =a; } return answer; }
a b중 어떤 게 큰 수인지 확인해 놓기
function solution(a, b) { let min=Math.min(a,b); let max=Math.max(a,b) let answer = 0; for(let i=min;i<=max;i++){ answer+=i; } return answer; }
가우스공식사용
function solution3(a, b) { let answer = 0; //양끝값을 더하고 길이 절반을 곱한다. answer =(a+b)*(Math.abs(a-b)+1)/2 return answer; }
5. 문자열을 정수로 바꾸기
문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
제한 조건
s의 길이는 1 이상 5이하입니다.
s의 맨앞에는 부호(+, -)가 올 수 있습니다.
s는 부호와 숫자로만 이루어져있습니다.
s는 "0"으로 시작하지 않습니다.
해결
function solution(s) { var answer = 0; answer=Number(s); //반대로 String(s) return answer; }
타입자동변환 이용
function solution2(s) { var answer = 0; answer=s*1;//문자에 숫자를 곱하면 숫자다, 숫자에 문자열을 더하면 문자 //혹은 s/1; //반대로 s+"" return answer; }
6. 없는 숫자 더하기
문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한 조건
1 ≤ numbers의 길이 ≤ 9
0 ≤ numbers의 모든 수 ≤ 9
numbers의 모든 수는 서로 다릅니다.
해결
includes(i)는 i값이 배열에 없으면 false있으면 true를 리턴
function solution(numbers) { let answer = 0; for(let i=0;i<=9;i++){ if(numbers.includes(i)===false){ answer+=i; } } return answer; }
indexOf(i)는 i가 있으면 해당 위치, 없으면 -1리턴
function solution2(numbers) { let answer = 0; for(let i=0;i<=9;i++){ if(numbers.indexOf(i)===-1){ answer+=i; } } return answer; }
reduce()사용
다른 사람 풀이(더 알아볼 것)
0부터 더한 값(45)에서 numbers배열 합을 뺀다
function solution3(numbers) { return 45 - numbers.reduce((cur, acc) => cur + acc, 0); }
Author And Source
이 문제에 관하여(알고리즘 공부 1일 차 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@doyeon11/알고리즘-공부1일-차-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)