메가바이트 스쿨 3주차 (12/28) Coding Test, javascript

정영찬·2022년 12월 29일
0
post-thumbnail

TIL

프로그래머스 코딩 테스트 8일차 문제풀이 완료!

그중에서 정말 오래 걸린 문제를 소개하려고 한다.

합성수 구하기 : 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 더해주고 cntindex의 값들을 초기화 시켜준 다음 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으로 초기화 시켰다.

정말 별거 아닌 문제였지만, 이런 실수때문에 시간을 날려먹게 되었다.
다 됐다고 생각한 코드도 테스트를 돌려보고 실패한 것을 보니까, 앞으로는 더 신중하게 코딩을 작성해야겠다고 생각했다.

javascript 시작

자바스크립트 런타임

자바스크립트가 구동되는 환경을 말한다. 이러한 자바스크립트 런타임의 종류로는 웹 브라우저(크롬, 파이어폭스, 익스플로러 등)프로그램과 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)은 truefalse 두가지 값인 논리 데이터이다

let a = true
let b = false
  • Null

존재하지 않는(nothing), 비어있는(empty), 알수없는(unknown)값을 명시적으로 나타냄

let age= null
  • Undefined
    '값이 할당되지 않은 상태'를나타낼 때 사용한다.
    변수는 선언했으나, 값을 할당하지 않았다면 해당변수에 undefined가 자동으로 할당된다.
let age // age 만 해놓고 값이 뭔데?
alert(age) // undefined 

Null 은 명시적, undefined는 암시적인 개념이라고 생각하면 된다.

개발 공부 조언

  • 모르는 개념이 있으면 1차적으로 이해 시도는 하되 더이상 되지 않으면 깊게 파려고 하지 말고 다시 돌아와라.
  • 지금 선택과 집중이 필요한 시기이다. 그런 배경지식공부에 시간을 투자하는것보다 하루하루 루틴을 해결하는 것에 집중해라.
profile
개발자 꿈나무

0개의 댓글