function solution1(n) {
answer = 0
if (Math.sqrt(n) % 1 ==0) {
answer = Math.pow(Math.sqrt(n) + 1,2)
} else {
answer = -1
}
return answer;
}
→ √n 을 1로 나눴을 때 0이 나오면 정수의 제곱근인 것으로 판별
function solution2(arr) {
let answer = []
if (arr.length < 2) {
answer = [-1]
} else {
answer = arr.sort((a,b) => a-b).splice(1)
}
return answer
}
→ 리스트의 길이가 2 미만이면 -1 출력
→ 오름차순으로 정렬하여 맨 앞 숫자 빼기
파라미터(compareFunction)가 입력되지 않으면, 유니코드 순서에 따라서 값을 정렬. Shllow Copy 주의. (오름차순으로 정렬하는 상황)
function solution3(num) {
let answer = 0
for (let i=0; i<500; i++){
if (num!==1) {
num = num % 2 == 0 ? num / 2 : num * 3 + 1
} else {
return answer = i
}
}
return answer = -1
}
→ if문으로 짝수와 홀수를 구별
→ n !==1
반복문으로 최대 500회 돌리기 feat. 삼항연산자
→ n==1
i 출력
→ 500회가 넘으면 -1 출력
return
위치에 유의하기
function solution4(n) {
let answer = ''
if (n%2==0) {
answer = '수박'.repeat(n/2)
} else {
answer = '수박'.repeat((n-1)/2) + '수'
}
return answer
}
→ n이 짝수면 n/2만큼 '수박'
찍기
→ n이 홀수면 (수박+'수') (n-1)/2만큼 '수박'
찍고 + '수'
코드를 더 짧게 짜는 연습이 필요하다.
function solution5(participant, completion) {
participant.sort()
completion.sort()
for(let i=0; i<participant.length; i++){
if(participant[i] !== completion[i]){
return participant[i]
}
}
}
→ 두 array 를 같은 배열로 정렬하고
→ 같은 순서에 있는 인덱스를 비교하는데
→ 일치하지 않는 인덱스가 있다면 출력
function solution6(s) {
let answer = []
let words = s.split(' ')
for (let i=0; i<words.length; i++){
answer.push(words[i].split('').map((cur, j)=>j%2?cur.toLowerCase():cur.toUpperCase()).join(''))
}
return answer.join(' ')
}
→ split
으로 글자를 쪼개서(단어로 분리)
→ 쪼개진 인덱스를 반복문으로 돌리며
→ 다시 split
으로 글자를 쪼개서(알파벳으로 분리)
→ map
을 이용해 대문자 소문자로 돌아가며 바꾸고
→ 다시 단어로 붙여서 answer
에 push
→ 출력하기 전 한 문장으로 다시 answer.join(' ')
답안을 보고 푼 문제였는데(사실 대부분이 그렇다) 코드가 넘 길어져서 오히려 가독성이 떨어진 경우.
모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환
const array1 = [1, 4, 9, 16];
const map1 = array1.map(x => x * 2); // pass a function to map
console.log(map1);
// expected output: Array [2, 8, 18, 32]
function solution7(n){
let answer = 0
let nums = []
do {
nums.push(n%10)
n = Math.floor(n/10)
} while (n>0)
return nums.reduce((acc, curr) => acc + curr)
}
(→ 숫자를 글자로 변환할 수도 있었지만)
→ do...while
로 좀 특이한 풀이(를 보고 풀었다)
→ 숫자↔텍스트 변환을 반복하지 않아도 되는 간단한 방법이라 익혀두면 좋을 것 같다!
function solution8(n){
let answer = 0
let nums = []
do {
nums.push(n%10)
n = Math.floor(n/10)
} while (n>0)
return nums
}
→ 어쩌다 보니 이전 문제와 로직이 겹쳐서 걍 푼 문제...
function solution9(n){
let answer = 0
let nums = []
do {
nums.push(n%10)
n = Math.floor(n/10)
} while (n>0)
answer = nums.sort((a,b) => b-a).join('')
return Number(answer)
}
→ 음 분명히 문제 없었는데 TIL 쓰면서 vsc 돌리니까 false 가 나온다... → n부터 false가 뜨는데... 같은 코드 사용한 위에는 문제가 없는데...😭
또 내가 뭘 잘못한 거니
아래 문제에서 함수명이 겹쳐있었다😗
→ 다시 본론으로, 똑같이 숫자를 뽑고
→ sort
로 이번에는 내림차순으로 출력한다
변수는 꼼꼼하게 관리하자
function solution10(x) {
let sum = 0;
let arr = String(x).split('');
for(let i=0; i<arr.length; i++) {
sum += Number(arr[i]);
}
return (x % sum == 0) ? true : false;
}
→ 숫자를 문자로 바꾸어 split
으로 쪼개준 후
→ for문으로 나눠진 인덱스의 총합을 구한다
→ 인덱스의 총합을 x 로 나누어 나머지를 확인하여 true 또는 false 출력
function solution11(x){
return !(x % (x + "").split("").reduce((a, b) => +b + +a ));
}
→ 같은 문제인데 다른 풀이
내장함수 더더더 많이 공부하기
function sol12(num){
let answer = ''
// console.log(num.split(''))
a = num.split('').splice(0,2).join('')
b = num.split('').splice(2,4).join('')
c = num.split('').splice(6,8).join('')
// console.log(a)
// console.log(b)
// console.log(c)
answer = '0' + a + '-' + b + '-' + c
return answer
}
→ 앞에 무조건 0을 붙여야 하고
→ 위치에 맞추어 '-' 을 추가하기
→ 두 조건은 answer에서 간단하게 처리하고
→ 임의로 들어온 숫자를 쪼개고 / 필요한 부분만 추려서 / 다시 붙인다
→ 그리고 제자리에 다시 붙이면 끝!
function sol13(num){
let answer = []
for(let i=0; i<arr.length; i++) {
if (arr[i] !== arr[i+1]) {
answer.push(arr[i])
}
}
return answer
}
→ for문을 돌려서
→ 인덱스와 그 다음 인덱스를 비교해
→ 같으면 버리고 다르면 push해서 새로운 배열을 만들기