반응형
[내가 처음 푼 풀이]
function solution(n) {
for(i=3; i<=n; i++){
n % i === 1;
}
return i;
}
이렇게 풀었을 때, 결과는
테스트 1 | |
입력값 〉 | 10 |
기댓값 〉 | 3 |
실행 결과 〉 | 실행한 결괏값 11이 기댓값 3과 다릅니다. |
테스트 2 | |
입력값 〉 | 12 |
기댓값 〉 | 11 |
실행 결과 〉 | 실행한 결괏값 13이 기댓값 11과 다릅니다. |
입력값 + 1 이 반환됨
왜?
1) n = 10 ,
i <= n 에 의해 i 도 10까지 반복함 (따라서 i = 10)
근데 for 문의 i++ 인해 10 + 1 = 11 반환
2) n = 12 ,
i <= n 때문에 i = 12
i ++ 인해 13 반환
[2번째 풀이] : 잘 실행은 됨
function solution(n) {
for(i=3; i<=n; i++){
if(n % i === 1) return i;
}
}
이 코드는 실행은 잘 된다.. 근데 왜 if()문 안에 넣어줘야 할까 고민을 함
function solution(n) {
for(i=3; i<=n; i++){
if(n % i === 1);
}
return i;
}
다르게도 적어서 넣어봤는데 내가 했던 방식과 똑같은 답이 나옴. return의 위치가 문제였던 것.
"가장 작은 자연수 x 를 return" 하라는 것 = "나머지가 1이 되도록 하는 자연수 x를 모두 구할 필요가 없다"
결국,
가장 작은 수 부터 차례대로 if(n % i === 1); 을 해주고 조건에 맞으면 바로 끝내줘야함
앞에서 for()문을 통해 가장 작은 수 부터 넣어주고 있으므로 조건에 맞으면 바로 끝내기 위해 return i ; 를 if()문과 같이 써줘야함
근데 주의할 것 !!
for()문에 var 가 아닌 let 을 사용해야 함.
function solution(n) {
for(let i=0; i<n; i++){
if(n % i === 1) return i;
}
}
var 로 i 를 선언하면 전역변수가 되기 때문에 레퍼런스 에러가 뜨지 않음
for()문에 let 으로 선언하는 이유는 다음 글에 한 번에 정리할 것!
https://hayeonn.tistory.com/13
[참고]
https://minzz.tistory.com/52?category=1022874
'코딩 테스트 > Programmers - 1' 카테고리의 다른 글
[JS] 두 개 뽑아서 더하기 (0) | 2022.08.28 |
---|---|
[JS] 문자열 내 마음대로 정렬하기 (0) | 2022.08.28 |
[JS] 수박수박수박수박수박수? (0) | 2022.08.22 |
[JS] 서울에서 김서방 찾기 (0) | 2022.08.22 |
[JS] 3진법 뒤집기 (0) | 2022.08.21 |