그중에서 정말 오래 걸린 문제를 소개하려고 한다.
합성수 구하기 : https://school.programmers.co.kr/learn/courses/30/lessons/120846
var answerCnt = 0; //합성수 갯수
var cnt = 0; // 나누어 떨어진 횟수
var index = 1; // 나누는 숫자
for (var i = 1; i < n+1 ; i++) {
while (index <= i) {
if (i % index === 0) {
cnt++;
}
if (cnt >= 3) {
answerCnt += 1;
cnt = 0;
index = 1;
break;
}
index += 1
}
}
1부터 n+1까지 차례대로 while 반복문을 수행하게 작성했다. i 값을 대상으로 index로 나눠 떨어진다면 cnt값을 증가시키고 만약 cnt가 3이상이 되는 순간 answerCnt
를 1 더해주고 cnt
와 index
의 값들을 초기화 시켜준 다음 while 문을 종료시키는 방식으로 코드를 작성했다. 이렇게 하면 합성수의 숫자를 세주는 값인 answerCnt를 리턴시켜주면 되는건줄 알았는데...
정확도가 83퍼센트로 테스트 케이스가 하나 실패한 상황이었다.
하나하나 코드를 뜯어보고난 다음 테스트로 solution(3)을 입력하니까 값이 1이 되었다....?
0이 나와야 하는데 왜 1이 나왔는지 확인해봤는데, 만약 3을 입력한 경우 1을 검사하고 2를 검사한 다음 3을 검사하기 시작한다. 그런데 이 과정에서 cnt가 전혀 초기화가 되지 않은 상태였기 때문에 3을 검사하는순간 cnt
가 3이상이 되어버려서 answerCnt
가 1이 더해져버린 것!
function solution(n) {
var answerCnt = 0;
var cnt = 0;
for (var i = 1; i < n+1 ; i++) {
for (var j = 1; j < i+1; j++){
if(i % j === 0){
console.log(cnt)
cnt++
}
}
if(cnt >= 3){
answerCnt++;
cnt=0;
}else{
cnt=0;
}
}
return answerCnt
}
while 문 대신에 for문을 하나 더 추가하고 cnt
의 값이 3이상인 경우answerCnt
의값을 증가시키는건 동일하지만, 여기서 만약 for문이 종료했을때 (합성수 검사를 마쳤을때) cnt
가 3미만이라면 다시 cnt
를 0으로 초기화 시켰다.
정말 별거 아닌 문제였지만, 이런 실수때문에 시간을 날려먹게 되었다.
다 됐다고 생각한 코드도 테스트를 돌려보고 실패한 것을 보니까, 앞으로는 더 신중하게 코딩을 작성해야겠다고 생각했다.
자바스크립트가 구동되는 환경을 말한다. 이러한 자바스크립트 런타임의 종류로는 웹 브라우저(크롬, 파이어폭스, 익스플로러 등)프로그램과 Node.js 라는 프로그램이 있다.
const str1 = "apple"
const str2 = 'pie'
// 템플릿 리터럴(보간 기능)
const str3 = `good ${str2}`
consoel.log(stre) // `Good World`
따옴표 세종류
※ 리터럴 : 기호를 통해서 데이터를 만드는 것!
const n1 = 123
const n2 = 12.345665
※NAN?
(Not-A-Number)숫자가 아닌 숫자를 나타낸다
const str= 'hello me!!'
console.log(Number(str)) //NaN
불린(boolean)은 true
와 false
두가지 값인 논리 데이터이다
let a = true
let b = false
존재하지 않는(nothing), 비어있는(empty), 알수없는(unknown)값을 명시적으로 나타냄
let age= null
undefined
가 자동으로 할당된다.let age // age 만 해놓고 값이 뭔데?
alert(age) // undefined
Null 은 명시적, undefined는 암시적인 개념이라고 생각하면 된다.