Back to the Basics

[CodeStates] [ Coplit ] 변수와 자료형&조건문 Review 본문

Programming Languages/JavaScript & Node.js

[CodeStates] [ Coplit ] 변수와 자료형&조건문 Review

9Jaeng 2021. 6. 6. 22:56
728x90

1. 첫 Pair Programming에 대한 느낀 점

처음으로 Part programming을 하였고, 2시~9시 약 7시간 동안(꾀나 오래) 진행을 하였다.

나의 첫 Pair 괜찮았다. 배려도 있고 말을 하는 데 있어 어색하지도 않았다. 쉬운 문제든 어려운 문제든 정말 열정적으로 하셨던 분 같다.

처음 해보는 페어 프로그래밍에서 첫 페어를 잘 만났다고 생각한다.

시작 전 대충 문제를 보았을 때 문제의 수는 많았지만, 난이도는 그렇게 높아 보이지 않았다. 해서 조금 천천히 느긋하게 진행을 해도 빨리 끝내고 개인 공부를 할 수 있을 줄 알았다.. 결과를 미리 말해보면 시간 내에 모든 문제를 풀지 못했다 ^^;;

이미 파이썬이나 다른 언어를 접하면서 기본적인 문제들은 풀어보았기에 금방 할 줄 알았지만, 혼자 했으면 좀 더 빨리 끝낼 수 있었을지도 모르지만 Pair programming은 나 혼자 하는 것이 아니기 때문에 더욱 시간이 걸렸던 것 같다.

  • 이유 1. 내가 생각하는 방향과 나의 의견을 상대방이 이해할 수 있도록 말을 해줘야 하는데, 사실 이게 그렇게 쉽지는 않았다.
  • 이유 2. 내가 먼저 문제를 이해했어도 상대방이 이해할 때까지 기다려야 한다는 점. (물론 반대의 경우도 있었다)
  • 이유 3. 수도 코드 적는데 고민하는 시간이 생각보다 길었던 것 같다.
    수도 코드만 보고도 어떤 방향으로 코드를 작성할지 알 수 있도록 작성해야 하고, 너무 구체적이지 않게 작성하려고 하다 보니
    민을 많이 하게 되던 것 같다.

사실 생각해보면 "내 생각을 남이 이해할 수 있도록 전달하는 능력(의사소통 능력)" , "글로 간결하게 정리하는 능력(글쓰기 능력?)" 은 어떤 직무에서건 정말 필요한 스킬인 것 같다. 개발자라면 더더욱 필요하다고 생각한다. 그리고 Pair programming을 하면서 상대방이 해주는 조언, 상대방이 문제를 푸는 스킬, 내가 몰랐던 지식을 배울 수 있어 혼자 공부를 하는 것보다 많이 도움이 될 것 같다. (처음 했을 뿐인데 벌써 여러 가지 배운 것 같다.)

2. 문제에 대한 Review

  • 다음 수강생을 위해 문제 자체를 공개하진 않고 난해하거나 고민을 많이 했던 것 등에 대한 리뷰이다.
  • 문제를 풀면서 정리해 두어야 할 사항들도 적었다.

조건문-07

  • key point : 조건문을 작성하는 순서!
  • 이 문제를 통해 조건문을 작성할 때 순서가 매우 중요하다는 것을 배웠다.
  • 중첩 if 문을 사용할 경우 가독성을 고려해야 한다.

*** 조건문을 작성할 때 가장 겹치는 부분이 많은 경우를 먼저 작성한다.

  • MECE(Mutually Exclusive, Collectively Exhaustive) 맥킨지 문제 해결 기법: 핵심 요소를 중복과 누락이 없이 분해하고, 분해된 항목의 합이 전체의 부분집합이 되도록 고려하여 문제를 분석하는 기법으로 문제를 해결하는 방법이다. --> 나중에 좀 더 공부하고 정리해보자. 만약 조건 1 또는 조건 2를 먼저 작성하게 된다면, 조건이 3인 인자가 입력될 경우 if(조건 3) 은 실행되지 않고 바로 함수를 나와 적절하지 않은 값을 return 하게 된다.
    function abs( ) { 
    if(조건 3= 조건 1 + 조건 2 + ...+) {return ;} 
    else if(조건 1) { return ;}
    else if(조건 2) { return ; } 
    }
  • (EX) 아래 함수와 같이 조건 3이 조건 1,2를 포함하는 내용일 경우, 조건 3을 먼저 if문으로 작성하고 나머지는 if else로 작성한다.

조건문-13

  • key point : 답을 결정하는 point
  • 이 문제는 등급을 구하고 그 값이 +인지 -인지 또는 둘 다 아닌지를 구하는 문제이다.
    조금 노가다로 if문을 사용하여 구현이 가능하겠지만, 만약 더욱 많은 조건이 있을 경우 매우 비효율적인 코드가 될 것이다.
    내가 생각한 이 문제의 핵심은 구해야 하는 답을 결정하는 요소(point)가 무엇인지 파악하는 것이다.
    등급을 결정하는 요소가 무엇인지, +,-를 결정하는 요소는 무엇인지 파악한다면, 여러 조건문에 조건문을 넣지 않고도 보다 효율적인 코드가 된다.
  • if (num < 3) { plusAndMinus = '-'; } else if (num > 7) { plusAndMinus = '+'; } else { plusAndMinus=''; }
  • 이와 같이 -,+를 결정하는 point를 찾고 그것을 이용하여 원하는 값을 보다 쉽게 얻을 수 있다.

조건문-14

  • 제곱을 하는 방법 정리
  • Math object의 Math.pow(x, y) methode 사용 --> x^y를 반환한다.
  • Math object는 생성자가 아니고 Math.PI or Math.sin(x)와 같이 Math 객체의 Properties와 methodes를 사용이 가능한 객체이다.
  • x**y --> x^y 승을 반환한다.

조건문-15

  • 내 답은 return!((expression1===false)&&(expression2===false));
  • 정답 Reference는 1개의 if문과 3개의 else if를 사용한다.
  • 두 방법을 사용해도 결과는 같고 모두 정답이다. 여기서 궁금한 것이 저 두 코드 중 어느 것이 더욱 효율적인 코드일까??
  • 아직은 시간 복잡도를 구하는 방법을 모르니, 지금 두 코드를 비교할 방법은 직접 코드를 돌려보는 방법뿐이니 시도해 보았다.
// My code function orByme(expression1,expression2){ // return "expression1 and expression2 are not equal with 'false' "" by using boolean type return !((expression1===false)&&e(xpression===false)); }`

// Compare code  
function orRef(expression1, expression2) {  
...
}

let t1;  
let t2;

t1=new Date().getTime();  
for(i=0;i<100000;i++){  
console.log(orByme(true,false));  
}  
t2=new Date().getTime();

console.log(Math.floor((t2-t1)%(1000\*60))/1000);

t1=new Date().getTime();  
for(i=0;i<100000;i++){  
console.log(orRef(true,false));  
}  
t2=new Date().getTime();

console.log(Math.floor((t2-t1)%(1000\*60))/1000);
  • 10만 번 돌린 결과 :
    orByme : 31.286 sec
    orRef : 31.203 sec

크게 차이는 나지 않지만, 0.08 sec 차이로 조건문을 사용하는 것이 더 빨랐다.
큰 차이가 난다면 판단하기 쉽겠으나, 0.8초의 차이가 큰 차이인지 모르겠다,

조건문-16

  • 내가 풀이한 방식 :
    자정 이 되는 경우 (23h 59 min 59 sec) 엔 h, m, s에 0을 할당.
    시간이 변하는 경우 (59m 59s) 일 경우엔 h+1, m=0, s=0 할당.
    분이 변하는 경우, 초가 변하는 경우
    총 4가지 경우를 가정하고, 그 경우에 변수들은 0으로 초기화하거나 1을 더하는 방식을 취했다.
  • if((hour===23)&&(minute===59)&&(second===59)) { hour=0; minute=0; second=0; } else if((minute===59)&&(second===59)){ hour+=1; minute=0; second=0; }else if(second===59){ minute+=1; second=0; }else { second+=1; }
  • Ref 풀이 방식 :
    이 풀이 역시 4가지 경우 (시간, 분, 초 가 변하는 경우)에 따라 코드를 작성하였는데,
    위의 조건문에 의해 변경된 사항이 다음 조건문에도 반영이 될 수 있게 작석을 하였다.
    더욱 간단하고, 깔끔하게 작성된 것 같다.
728x90
Comments