[알고리즘] Algorithm Challenge_2023.3.25

신재욱·2023년 3월 25일
0
post-thumbnail

1️⃣ 나머지가 1이 되는 수 찾기


풀이

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문 대신 &&을 사용했다.

1️⃣ 정수 내림차순으로 배치하기


풀이

function solution(n) {
return Number(String(n).split('').sort((a,b)=>b-a).join(''))
}

📝 풀이 설명

  • n값을 문자열로 바꾼다.
  • 그 값을 split으로 배열로 나눈다.
  • sort 내림차순으로 배열을 정렬한다.
  • join으로 값들을 문자열로 합친다.
  • 문자열 값을 숫자로 바꾼다.

1️⃣ 하샤드 수


풀이

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를 반환한다.

1️⃣ 두 정수 사이의 합


풀이

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])
  • 그 값들을 모두 더해준다.

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을 답하게 만들었다.

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이라는 것을 나중에도 잘 쓸 수 있을 거 같다.

1️⃣ 음양 더하기


풀이

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다. 그렇다면 양수를 더하고 아니면 음수를 더한다.
  • 최종값을 반환

🤭 약간의 동기부여..?

profile
2년차 프론트엔드 개발자

0개의 댓글