풀이
function solution(n) { answer = []; for(let i=1; i<=n; i++){ if(n%i===1){ answer.push(i) } } return answer[0] }
📝 풀이 설명
그냥 조금 무지성으로 풀었다. 무지성이라고 하니까 뭔가 이상하지만 좀 더 짧게 만들 수 있을 거 같은데.. 다시 이쁘게 만들어봐야겠다.
- 반복문을 주어진 n만큼 돌린다. i를 자연수로 사용할 생각이라 1부터 시작했다.
- 반복문안에 조건문으로 n을 나눈 결과가 1인 값만 받는다.
- 반복문과 조건문을 돌며 찾은 값을 answer 배열에
push
로 넣는다.- 가장 작은 값이니까 answer[0] 처음 값을 답으로 준다.
조금 줄인 풀이
function solution(n) { answer = []; for(let i=1; i<=n; i++){n%i===1 && answer.push(i)} return answer[0] }
📝 풀이 설명
그렇다..큰 변화는 없다.
if문
대신&&
을 사용했다.
풀이
function solution(n) { return Number(String(n).split('').sort((a,b)=>b-a).join('')) }
📝 풀이 설명
- n값을 문자열로 바꾼다.
- 그 값을 split으로 배열로 나눈다.
- sort 내림차순으로 배열을 정렬한다.
- join으로 값들을 문자열로 합친다.
- 문자열 값을 숫자로 바꾼다.
풀이
function solution(x) { let sum = 0; let aaa =String(x).split('') for(let i =0; i<aaa.length; i++){ sum += Number(aaa[i]) } let answer = x%sum===0 ? true : false return answer }
📝 풀이 설명
- X에 주어진 숫자를 문자로 바꾸고 배열로 나눈다.
- 배열의 길이만큼 반복문을 돌리며 나온 값들을 숫자로 변환하며 더한다.
- x값과 더한 값을 더해서 0이 나오면 true를 아니면 false를 반환한다.
풀이
function solution(a, b) { let sum = 0; let arr=[a,b] arr.sort((a,b)=>a-b) for(let i=arr[0]; i<=arr[1]; i++){ sum +=i } return sum; }
📝 풀이 설명
- arr배열에 0번과 1번에 넣는다.
- 배열을 오름차순으로 정렬한다.
- 반복문을 할때 초기값엔 무조건 둘중 작은 숫자 반복문은 둘중 큰 수까지
ex) 1(arr[0])+2+3(arr[1])- 그 값들을 모두 더해준다.
풀이
function solution(num) { let aaa = num; let sum = 0; let answer =0; for(let=i=1; i<=500; i++){ if(aaa===1){ answer = sum break }else if(aaa%2===0){ aaa = aaa/2 sum +=1 }else if(aaa%2!==0){ aaa = aaa*3 +1 sum +=1 } } if(sum===500){ answer = -1 } return answer }
📝 풀이 설명
생각보다 재미있고 어려웠다.
- 일단 반복문을 돌아야겠다는 생각을 했다. 횟수를 500으로 제한했으니까 500까지 돌려야겠다 생각했다.
- 조건문 사용 짝수면 준 값에 나누기 2하고 홀수면 준 값에 3을 곱하고 1을 더한다.
- 그렇게 설정하니 num 16일때 4가 나온다..
- 혹시 1이 나와도 그 이후에 조건문이 돌아서 그런게 아닐까 생각했다. 그래서 조건문을 걸어 원한느 값이 1이 되면 brak를 걸었다. 그래도 4가 나온다.
- 아!! 원하는 값을 if문을 돌때 맨 뒤에 있어서 그런 거 같다.
- 앞으로 보내니 1이 나온다. 그러나 구해야하는 답은 몇번 반복했는지다.
- sum변수에 조건에 걸릴때마다 +1을 했다.
- 원하는 값에 도달하면 그 값을 answer에 넣었다.
- 그리고 500회를 넘은 값은 따로 조건문을 걸어 -1을 답하게 만들었다.
풀이
function solution(arr, divisor) { answer = [] for(let i =0; i<arr.length; i++){ if(arr[i]%divisor===0){ answer.push(arr[i]) } } if(answer.length>0){ answer.sort((a,b)=>a-b) }else if(answer.length===0){ answer.push(-1) } return answer }
📝 풀이 설명
음 그렇게 어려운 부분은 없었는데 마지막에 조금 시간이 걸렸다. 그래도 좋았다.
- 반복문을 돌리고 조건문을 사용해 나누어 떨어지는 값을 배열에 넣는다.
- 이제 배열에 담겨있으면 담긴 값을 작은것부터 큰 순서대로 반환하면 된다. 이건 이지 그런데 나누어 떨어지는 값이 없는 값은 -1을 배열에 담아서 보내줘야한다. 음...다른 사람들은 쉽게 생각할 수 있겠지만 난 여기서 조금 멈칫했다. 배열에 아무것도 없음을 조건문에 걸지? 아!!!! 배열에 길이가 없으면 비어있는 것이구나!!!
- 그 이후는 쉽다. 배열이 비어있음은 길이가 0이라는 것을 나중에도 잘 쓸 수 있을 거 같다.
풀이
function solution(absolutes, signs) { let sum = 0; for(let i =0; i<absolutes.length; i++){ signs[i] ? sum += absolutes[i] : sum -= absolutes[i] } return sum }
📝 풀이 설명
어렵지 않았다. 홀홀
- 반복문
signs
absolutes
배열의 길이는 둘중 아무거나 해도 된다.- 사실 처음엔 if문으로 작성했다가 삼항연산자로 바꿔서 작성했다.
- 만약 signs[i]이면은 자동으로 true다. 그렇다면 양수를 더하고 아니면 음수를 더한다.
- 최종값을 반환
🤭 약간의 동기부여..?