반응형
Level 1 연습문제 ( JavaScript )
작성한 코드보다 더 좋은 코드가 있음을 미리 알려드리며,
코드의 해설이 필요하신 분은, 댓글 남겨주시면 적어놓겠습니다.
목차
- 직사각형 별찍기
- x만큼 간격이 있는 n개의 숫자
- 행렬의 덧셈
- 핸드폰 번호 가리기
- 하샤드 수
- 평균 구하기
- 콜라츠 추측
- 최대공약수와 최소공배수
- 짝수와 홀수
- 제일 작은 수 제거하기
- 정수 제곱근 판별
- 정수 내림차순으로 배치하기
- 자연수 뒤집어 배열로 만들기
- 자릿수 더하기
- 이상한 문자 만들기
- 약수의 합
- 시저 암호
- 문자열을 정수로 바꾸기
- 수박수박수박수박수박수?
- 소수 찾기
- 서울에서 김서방 찾기
- 문자열 다루기 기본
- 문자열 내림차순으로 배치하기
- 문자열 내 p와 y의 개수
- 문자열 내 마음대로 정렬하기
- 두 정수 사이의 합
- 나누어 떨어지는 숫자 배열
- 같은 숫자는 싫어
- 가운데 글자 가져오기
- 2016년
풀이
1. 직사각형 별찍기
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const n = data.split(" ");
const a = Number(n[0]), b = Number(n[1]);
console.log(('*'.repeat(a) + '\n').repeat(b));
});
2. x만큼 간격이 있는 n개의 숫자
function solution(x, n) {
return Array(n).fill(x).map((a,i) => a+x*i)
}
3. 행렬의 덧셈
function solution(arr1, arr2) {
return arr1.map((a,i) => a.map((b,j) => b + arr2[i][j]));
}
4. 핸드폰 번호 가리기
function solution(phone_number) {
return `${"*".repeat(phone_number.length-4)}${phone_number.slice(-4)}`
}
5. 하샤드 수
function solution(x) {
return !( x % (''+x).split('').reduce((a,b) => +a + +b) );
}
6. 평균 구하기
function solution(arr) {
return arr.reduce((a,b) => a+b)/arr.length
}
7. 콜라츠 추측
function solution(num) {
let count = 0;
while ( num !== 1 ) {
if ( count === 500 ) return -1;
count++;
num = num % 2 ? num*3+1 : num/2
}
return count;
}
8. 최대공약수와 최소공배수
function solution(n, m) {
let gcd = 1;
for ( let i = 1; i <= Math.min(n,m); i++ ) {
if ( !(n%i) && !(m%i) ) gcd = i
}
return [gcd, n*m/gcd]
}
9. 짝수와 홀수
function solution(num) {
return num % 2 ? "Odd" : "Even"
}
10. 제일 작은 수 제거하기
function solution(arr) {
const idx = arr.indexOf(Math.min(...arr))
return arr.length > 1 ? [...arr.slice(0,idx), ...arr.slice(idx+1)] : [-1]
}
11. 정수 제곱근 판별
function solution(n) {
return Number.isInteger(n ** 0.5) ?
(n ** 0.5 +1) ** 2 : -1
}
12. 정수 내림차순으로 배치하기
function solution(n) {
return +(''+n).split('').sort((a,b) => +b - +a).join('')
}
13. 자연수 뒤집어 배열로 만들기
function solution(n) {
return (''+n).split('').reverse().map(a => +a)
}
14. 자릿수 더하기
function solution(n) {
return (''+n).split('').map(a => +a).reduce((a,b) => a+b)
}
15. 이상한 문자 만들기
function solution(s) {
return s.split(' ')
.map( str => str.split('')
.map((word,i) => i % 2 ?
word.toLowerCase() :
word.toUpperCase()).join('')).join(' ');
}
16. 약수의 합
function solution(n) {
return Array(n).fill(1).map((a, i) => a + i)
.reduce((a, b) => a + (n % b === 0 ? b : 0), 0)
}
17. 시저 암호
function solution(s, n) {
function change(w) {
const c = w.charCodeAt()
if ( c >= 97 && c <= 122 ) {
return c + n > 122 ?
String.fromCharCode(c + n - 26) :
String.fromCharCode(c + n)
}
if ( c >= 65 && c <= 90 ) {
return c + n > 90 ?
String.fromCharCode(c + n - 26) :
String.fromCharCode(c + n)
}
return " ";
}
return s.split('').map(a => change(a)).join('')
}
18. 문자열을 정수로 바꾸기
function solution(s) {
return +s
}
19. 수박수박수박수박수박수?
function solution(n) {
return "수박".repeat(parseInt(n/2))+"수".repeat(n%2)
}
20. 소수 찾기
function solution(n) {
const arr = Array(n+1).fill(true).fill(false, 0, 2);
for ( let i = 2; i * i <= n; i++ ) {
if ( arr[i] ) {
for ( let j = i * i; j <= n; j += i ) {
arr[j] = false;
}
}
}
return arr.filter(e => e).length;
}
21. 서울에서 김서방 찾기
function solution(seoul) {
return `김서방은 ${seoul.indexOf("Kim")}에 있다`
}
22. 문자열 다루기 기본
function solution(s) {
return (s.length === 4 || s.length === 6) &&
s.split('').every(a => !isNaN(a))
}
23. 문자열 내림차순으로 배치하기
function solution(s) {
return s.split('')
.map(a => a.charCodeAt()).sort((a,b) => b-a)
.map(a => String.fromCharCode(a)).join('');
}
24. 문자열 내 p와 y의 개수
function solution(s){
return !s.toUpperCase().split('').filter(a => a === 'P' || a === 'Y')
.reduce((a, b) => a + (b === 'P' ? 1: -1), 0)
}
25. 문자열 내 마음대로 정렬하기
function solution(strings, n) {
return strings
.sort((a,b) => {
let i = 0;
while ( a[i] === b[i] ) i++;
return a[i].charCodeAt() - b[i].charCodeAt()
})
.sort((a,b) => a[n].charCodeAt() - b[n].charCodeAt());
}
26. 두 정수 사이의 합
function solution(a, b) {
return ( a + b ) * ( Math.abs( b - a ) + 1 ) / 2;
}
27. 나누어 떨어지는 숫자 배열
function solution(arr, divisor) {
const result = arr.filter(el => !(el%divisor)).sort((a,b) => a-b);
return result.length ? result : [-1]
}
28. 같은 숫자는 싫어
function solution(arr) {
return arr.filter((a,i) => a !== arr[i+1])
}
29. 가운데 글자 가져오기
function solution(s) {
return s.length % 2 ?
s[parseInt(s.length/2)] :
s.substr(s.length/2-1, 2);
}
30. 2016년
function solution(a, b) {
return new Date( 2016, a-1,b ).toString().slice(0,3).toUpperCase();
}