[프로그래머스] 나머지가 1이 되는 수 찾기 (for, return)

조아연·2024년 6월 24일

JavaScript 공부

목록 보기
20/24

JavaScript 코딩테스트 나머지가 1이 되는 수 찾기 (15일)

나머지가 1이 되는 수 찾기

음.. 쉽진 않다

푸는 방법

  1. 문제를 봤을 때 우선 코딩생각 안하고 수학적 수식으로 풀어본다.
    n / x % = 1
    x는 가장작은수여야 한다

어떤 수식을 써야할까 생각하다가 for문이 적합하다고 생각했다

첫번째 답변

function solution(n) {
    var answer = 0;
    sum = 0;
    for (let x = 3; n > x; x++ ) {
        n % x === 1
    }
    return x ;
}

반쯤 맞은것 같긴한데 규정과 맞지 않아서 에러가 나는 듯 하다

for문안에서 쓰던 x를 바로 리턴시킨다고 해서 에러가 나는 것으로 파악 중이다.

그래서 if문을 통해 sum에 데이터를 저장할 수 있는 구조로 고쳤다.

두번째 답변

function solution(n) {
    var answer = 0;
    sum = 0;
    for (let x = 3; n > x; x++ ) {
        if (n % x === 1) {
            sum += x
        }
    }
    return sum ;
}

결과는 나오긴 하는데 일치하는 결과가 안나온다..
테스트 3번 실행결과 참고해서 수식이 어떻게 동작하는지를 봤는데

if (n % x === 1) {sum += x}

요 수식 때문에 SUM값에 나머지 1을 충족하는 수가 이렇게 계속 더해져서..
3+4+6+12 = 25가 나온 것 같다

그래서 그냥 SUM은 X야 라고 박아버리면 어떻게될까

if (n % x === 1) {sum = x}

그랫더니 당연히 결과가 다르게 나왔다.

for문 중 x를 선언하고 x를 통해 숫자를 더해가며 반복문을 진행하는데
if문에서 x는 sum이야 라고 선언해버리니까 n > x; 에서 반복문이 걸리면 무조건 빠져나오기 때문에
n보다 하나 작은 숫자로 결과값이 나왔다. 음! 그렇군

먼가 너무 어렵게 생각한것 같아서 chatGPT를 살짝 참고했다.

세번째 답변

function solution(n) {
    var answer = 0;
    sum = 0;
    for (let x = 3; n > x; x++ ) {
    if(n % x === 1) {
        return x;
       }
    }

N에서 X로 나눴을 때 1이 남는다면, 바로 그냥 반복문 진행안하고 X를 리턴시켜 버리면 된다.

그랬더니 답이 잘 나왔다.
X를 어떻게 답을 빼낼지, SUM에 어찌 넣어야할지 참 고민이었는데 간단한걸 너무 어렵게 생각한 듯 하다.

하지만.. 채점하기 하니까 테스트 3번 4번에서 걸렸다 ㅜ

질문하기 가서 보니까 나처럼 똑같이 3번 4번에서 실패한 사람이 남긴 글이 있었다

역시 나도 x를 3으로 부터 잡고 시작해서 걸렸던 것 같아서 수정했다.

네번째 답변

function solution(n) {
    var answer = 0;
    sum = 0;
    for (let x = 0; n > x; x++ ) {
    if(n % x === 1) {
        return x;
       }
    }
}

수정했더니 통과했다!

오늘 배운점

  • for 문을 활용해서 다양하게 쓸 수 있다.
  • if문도 쓸 수 있고 if문이 맞다면 반복시키는 것 뿐만 아니라 바로 답을 return시키는 것도 가능하다.
  • 구문은 꼼꼼히! n과x를 헷갈려서 수식을 잘못써서 아쉽게 틀렸다.
profile
비전공자 QA의 자기개발 공부노트

0개의 댓글