항해14기 온보딩/항해14기 온보딩 개발일지

[항해14기] 온보딩 개발일지10 2023/03/16

스쿼트잘함 2023. 3. 16. 21:15

to do list 기술 매니저님 리뷰

1. 들여쓰기, 네이밍

- 혼자서만 사용할 코드가 아니므로 줄정리를 통한 가시성 확보 필수

- 컨벤션 등을 통한 네이밍 통일, 네이밍의 직관력 중요

 

2. 코드 설계 방식

- 큰그림을 그리듯이, 목차 위주로

- 함수명과 로직구상이 중요

- 큰 설계가 끝난 이후 함수 상세내용은 언제든지 누가해도 상관 X

 

3. 모듈화

- 함수에 함수가 꼬리를 무는 방식은 의존적인 방식

- 개별 함수들을 만들어 놓은 후, 필요한 로직은 개별 함수들을 따로 조합해서 생성

 

* 위 방식으로 개선하여 웹종합 강의를 들은 후 구현 해볼 예정

작성 중인  to do list 코드
let todolist = []

function todoinput(){
  const a = prompt('제목 입력')
  const b = prompt('내용 입력')
  const c = prompt('완료 여부')
  addlist(a,b,c)  
  
}

function disc(){
  return new Date().getTime()

}

function addlist(a, b, c){
    let adl = {
        번호 : disc(),
        제목 : null,
        내용 : null,
        완료 : null // 완료방식 true/false으로 변경 예정
    }
   
    adl.제목 = a
    adl.내용 = b
    adl.완료 = c
    console.log(adl)
    todolist.push(adl)
    return
}

todoinput()

console.log(todolist)

function edit(){
    //고유키값에 접근 후 수정
    // 1차구상 : addlist방식으로 프롬프트 사용
}

function comp(){
    // 완료여부 취소 함수 구상 예정
}

 

 

 

백준 js로 업로드 하는법

1. 언어 설정을 node.js로 변환한뒤 상단에 아래와같은 조건을 걸어주어야 한다

1. 하나의 값을 입력받을 때
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim();

2. 공백으로 구분된 한 줄의 값들을 입력받을 때
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split(" ");

3. 여러 줄의 값들을 입력받을 때
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

4. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄에 공백으로 구분된 n개의 값들을 입력받을 때
const fs = require('fs');
const [n, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split(/\s/);

5. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄부터 n개의 줄에 걸쳐 한 줄에 하나의 값을 입력받을 때
const fs = require('fs');
const [n, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

6. 하나의 값 또는 공백으로 구분된 여러 값들을 여러 줄에 걸쳐 뒤죽박죽 섞여서 입력받을 때
  ex) n 입력 - 공백으로 구분된 n개의 값 입력 - m 입력 - 여러 줄에 걸쳐 m개의 값 입력
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split(/\s/);
const n = input[0];
const n_arr = input.slice(1, n+1);
const [m, ...m_arr] = input.slice(n+1);

 

2. 이후 입력값(input)을 받을 수 있도록 로직을 짠 뒤 테스트케이스에 대한 정답을 console.log로 출력해야 채점이 가능하다

 

 

백준 문제

1. 4948 베르트랑 공준

js의 테스트 케이스는 통과 but 제출불가 제출 성공 정답 양식
1. 제출 양식에 맞추지 못함

function solution(n){
let a = []
if (n===1){
return 1
}   else if (n===0){
    return
} else {
for (i=n+1; i<n*2; i++){
  for (j=2; j<n; j++){
   if (Number.isInteger(i/j)){
   a.push(i)
   
   }
  }
 }
let b = [...new Set(a)]
return  n-1-b.length

}}

console.log(solution(value))


2. 문제 입력을위해 3중 포문으로 변경하였더니 시간초과

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map(Number);

for(let i=0; i<input.length; i++){
    let a = []
    if(input[i]===0) {
    break;} else  if (input[i]===1){
  return 1 
  }  else if (input[i]>1){      
      for (j=input[i]+1; j<input[i]*2; j++){
         for (k=2; k<input[i]; k++){
           if (Number.isInteger(j/k)){
           a.push(j)
           }
         }
        }
    }
    let b = [...new Set(a)]
    
    let c = input[i]-1-b.length
    console.log(c)
    

}
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map(Number);
// let input = [1, 10, 13, 100, 1000, 10000, 100000, 0];

function isPrime(num) {
        if(num===1) return false;
        for(let i=2; i<=parseInt(Math.sqrt(num)); i++){
            if(num%i===0) return false;
        }
        return true;
    };

for(let i=0; i<input.length; i++){
    if(input[i]===0) break;
    
    let count = 0;
    for(let j=input[i]+1; j<=input[i]*2; j++){
        if(isPrime(j)) count++;
    };
    console.log(count);
}