221215 프로그래머스 나머지가 1이 되는 수 찾기(자바, 자바스크립트)

샨티(shanti)·2022년 12월 17일
0

코딩테스트

목록 보기
3/35
post-custom-banner

매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅

어제 푼 문제는 기록을 못했네..ㅎㅎ
오늘은 잊지 말고 기록하려고 풀자 마자 쓰는 일지.
자바로 풀었을 때는 for문으로 거의 10분 내에 해결한 것 같고, javascript로 풀 때는 for문을 안써보려고 이리저리 헤맸는데..

생각보다 시간이 오래 걸려서 깜짝 놀라기도 했고, 아직 find, filter, map, forEach 등 array 관련 함수들을 사용하는게 자유롭지 않다는걸 느낌.

자바스크립트 코드의 경우 깔끔한 코드는 아니지만 for문을 쓰지 않으려는 노력의 결과물로 기록...ㅋㅋ. 다른사람들의 풀이가 아마 더 간결할거다.


문제.


자바(Java) 및 자바스크립트(Javascript) 풀이 방법 및 코드

  • 1로 나눴을 때 나머지는 항상 0이기 때문에 의미가 없으므로 시작하는 수를 2로, 그리고 종료 시점은 n보다 1 적은 시점이 되어야 하므로 위 조건을 충족하는 for문을 사용하여 자바 문제 해결
  • 자바스크립트는 주어진 수 n만큼의 길이를 가진 array를 선언한 후 0으로 채움. 이후 해당 배열의 index로 주어진 n을 나눈 나머지값이 들어간 배열을 새로 생성함(0으로 나눈 경우는 NaN이 입력됨)
  • 그리고 해당 배열의 원소가 1일 경우(나머지가 1인 경우)는 index를, 아닌 경우 0을 리턴하여 만든 새로운 array에서 원소가 0이 아닌 경우의 index를 찾아 return

Java Solution

class Solution {
    public int solution(int n) {
        int result = process(n);

        return result;
    }

    public int process(int n) {
        for (int i = 2; i < n; i += 1) {
            if (n % i == 1) {
                return i;
            }
        }
        return n - 1;
    }
}

Javascript Solution 1

function makeArray(number) {
  return new Array(number).fill(0).map((_, index) => number % index);
}

function findIndex(array) {
  const newArray = array.map((value, index) => {
    if (value !== 1) {
      return 0;
    }

    return index;
  });

  const result = newArray.find((value, index) => {
    if (value !== 0) {
      return index;
    }

    return 0;
  });

  return result;
}

function solution(n) {
  const newArray = makeArray(n);

  return findIndex(newArray);
}

자바스크립트쪽 코드를 좀 더 정리할 수 있어보였는데 생각만큼 잘 안됐다.
근데 정리하다가 findIndex 메서드를 알게되어 요걸로 한번 다시 풀어봤는데 가능!! 역시... 다양한 도구를 가져야 여러 방법으로 풀어볼 수 있는 것 같다.

Javascript Solution 2

function makeArray(number) {
  return new Array(number).fill(0)
    .map((_, index) => number % index);
}

function findIndex(array) {
  return array.map((value, index) => (value !== 1 ? 0 : index))
    .findIndex((value) => value !== 0);
}

function solution(n) {
  const newArray = makeArray(n);

  return findIndex(newArray);
}

아니 근데 웃긴게...ㅋㅋㅋ
function을 만들면서 이름을 findIndex라고 지어놨었는데 그 이름의 메서드가 있었구나...ㅎ..하핳......

여튼 이렇게 또 배우고 간다. findIndex!!

Array.prototype.findIndex()

  • 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환
  • 만족하는 요소가 없으면 -1을 반환
  • find() 메서드는 인덱스 대신 값을 반환함

from MDN

profile
가벼운 사진, 그렇지 못한 글
post-custom-banner

0개의 댓글