일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 알고리즘
- 파이썬 알고리즘 인터뷰
- java
- 컴퓨터공학
- 비동기
- REACT
- algorithm
- useState
- react 기초
- 코드스테이츠
- Operating System
- 프로그래머스
- 운영체제
- 자바스크립트
- JavaScript
- Zerobase
- context switching
- execution context
- codestates
- node.js
- 파이썬
- 자료구조
- 자바
- Python
- typeScript
- 글또
- Computer Science
- 개발공부
- python algorithm
- OS
- Today
- Total
Back to the Basics
[Js/node][Codestates] Coplit_문자열 & 반복문 Review 본문
[Js/node][Codestates] Coplit_문자열 & 반복문 Review
9Jaeng 2021. 6. 15. 23:45Coplit 문자열, 반복문 Review
드디어 두 번째 코플릿을 진행하였다. 나는 문제를 풀 때 한 가지 방법이 아닌 다양한 방법을 생각해보고, 더 효율적인 방법이 있는지 고민하면서 푸는 편이다. 이번 pair도 나와 비슷한 성향이어서 잘 맞았던 것 같다. 지금은 빨리 문제를 푸는 것보다 다양한 방법을 시도해 보면서 문제를 풀기 때문에 이번 코플릿 문제도 다는 못 풀었던것 같다. 그래도 저번 코플릿을 했을 때 보다는 많이 풀었으니 좀 더 속도도 향상? 되었다고 해도 되지 않을까...ㅎ
저번 코플릿에서 미흡했던 점을 생각하며 , 이번 코플릿 에서는 나의 진행 방향과 코드를 Pair 가 이해할 수 있도록 차분하게 설명하려고 노력했다.
저번보단 설명하는 것과 수도 코드 작성이 좀 더 부드러워지긴 한 것 같다.
이 글의 목적은 코플릿 코드 리뷰이니 잡담은 그만하고 본론으로 들어가겠다.
문자열 - 06 : findShortestOfThreeWords
- 문자열을 입력받아 가장 짧은 문자열을 리턴하는 문제
- Input : 3 개의 문자열
- Output : 문자열
- My Code
- 3개의 숫자 또는 문자의 길기 등을 크기 순으로 비교하는 문제는 보통 조건문을 사용하여 3개의 인자를 비교하는 형식으로 풀이가 많이 되어있다.
나는 이 방법 이외의 방법 중 내장 메서드를 사용하는 방법으로 풀이를 하였다.
먼저 최솟값을 찾아서 return해 주는 Math.min 메서드를 사용하여 새로운 변수에 할당하고, 각 문자열의 길이를 최솟값과 비교하는 방법이다.
// Math.min 메서드를 사용하여 가장 작은 문자열을 변수에 할당한다.
// 조건문을 사용하여 각 문자열의 길이 중 최소 길이와 같은 것을 리턴한다.
function findShortestOfThreeWords(word1, word2, word3) {
// TODO: 여기에 코드를 작성합니다.
let minNum=Math.min(word1.length,word2.length,word3.length);
if(minNum===word1.length){
return word1;
}else if(minNum===word2.length){
return word2;
}else{
return word3;
}
}
- Reference Code - 직접 비교
function findShortestOfThreeWords(word1,word2,word3){
let shortestWord=word1;
// 첫 번 째 글자가 2번째 글자보다 길 때
if(word2.length>word2.length){
shortestWord=word2;
// word 2랑 word3을 비교
if(word2.length>word3.length){
shortestWord=word3;
}
} else{
// word1과 word3을 비교
if(word1.length>word3.length){
shortestWord=word3;
}
}
return shortestWord;
}
문자열 - 17 - makeLasrSeenMsg
- 접속시간을 입력받아 조건별로 다른 메세지 리턴하는 문제.
- 미접속 시간이 1시간 보다 적으면 --> 분단위로 표기
- 미접속 시간이 1시간보다 크로 24시간 보다 적으면 시간 단위로 표기
- 미접속 시간이 24시간 보다 크다면 일 단위로 표기
- 모두 내림처리아혀 표기
- Input : name, period(접속 시간)
- output : 조건에 따라 다른 메제시 출력
이 문제는 간단하고 reference cede도 나의 풀이와 결과는 비슷했지만 다른점이 있다면 조건문의 순서가 다르다. 하지만 바뀐 순서에 의해 비교연산을 하는
횟수는 더 줄어들었으므로, 만약 더 복잡한 코드였다면 비교연산을 덜 하는 Reference 코드가 훨식 빠르고 좋은 코드일 것이다.
Reference Code는 이전 코드리뷰에서 작성했던 [210606]_Coplit_변수와 자료형&조건문 Review 포스트에서 언급했던 " MECE(Mutually Exclusive, Collectively Exhaustive) 맥킨지 문제해결 기법 " 의 논리를 적용한 결과이다.
다중 조건문이 들어갈 때, 겹치는 범위가 있다면 가장 작은 범위의 조건을 우선순위로 작성한다.
Min( hour ( day () ) ) 에서 보면 day의 범위가 가장 작은 것을 알 수 있다.
아래의 코드를 비교해보면 차이를 알 수 있다.
- My Code
첫 번째 조건문 : minute
두 번째 : hour
세 번째 : day
의 순서로 조건문을 작성하였다.
function makeLastSeenMsg(name, period) {
// TODO: 여기에 코드를 작성합니다.
//String 타입의 이름과 Number 탑입의 시간을 분단위로 입력받는다.
// 만약 period가 60 미만일 경우 분단위로 출력한다.
// 만약 60보다 크고 1440 미만일 경우 period를 60으로 나눈 몫을출력한다.
// 1440보다 킁 경우 1440으로 나눈 몫을 리턴한다.
if(period < 60){
return `${name}: ${period}분 전에 접속함`
}else if(period>=60 && period<1440){
return `${name}: ${Math.floor(period/60)}시간 전에 접속함`
}else{
return `${name}: ${Math.floor(period/1440)}일 전에 접속함`
}
}
- Reference Code
첫 번째 조건문 : day
두 번째 조건문 : hour
세 번재 조건문 : minute
순으로 작성하였다.
function makeLastSeenMsg(name, period) {
// TODO: 여기에 코드를 작성합니다.
const day = 60 * 24;
const hour = 60;
if (period >= day) {
return `${name}: ${Math.floor(period / day)}일 전에 접속함`;
} else if (period >= hour) {
return `${name}: ${Math.floor(period / hour)}시간 전에 접속함`;
} else {
return `${name}: ${period}분 전에 접속함`;
}
}
My Code에선 두번 째 조건문에서 period가 60 보다 크거나 같고 (&&) 24시간 보다 작다는 조건을 총 3개의 비교연산자를 사용하였다.
Reference Code에선 day를 먼저 함으로써 period가 60보다 크거나 같을 조건만 사용하였다. (이미 24시간 보다 작을 조건은 else if 에서 걸러지기 때문) 조건문을 사용할 때는 꼭 가장 작은 범위를 먼저 놓는 습관을 들여야겠다.
반복문 - 03 isOdd
- 압력받은 수가 홀수인지 판별
- 0을 짝수로 간주한다.
- Input : Integer
- Output : Boolean
이 문제는 Pair가 Nevigator일 때 풀었던 문제이고, 조금 독특한 방법으로 풀이를 했기 때문에 비교해 보았다.
나 또한 다른 방법으로 풀었으니 Pair의 Code와 My code, Reference를 비교해 보겠다.
- Pair Code
입력된 수의 절대값 만큼 반복을 하고 , True와 False를 변수에 할당하는 코드를 반복한다.
홀수이면 True가 마지막에 리턴이 되고 짝수일 경우 False가 리턴이 되는 구조이다.
코드는 아래와 같다.
function isOdd(num) {
// TODO: 여기에 코드를 작성합니다.
// 수를 입력받습니다.
// 반복문을 사용하여 홀수면True를 짝수면 False를 리턴합니다.
let i=0;
let absNum=Math.abs(num);
let isOddTemp=true;
while(i<=absNum){
if(isOddTemp===true){
isOddTemp=false;
}else{
isOddTemp=true;
}
i++;
}
return isOddTemp;
}
- My code
음수이든 양수이든 결국 맨 마지막 숫자는 1,3,5,7,9 중에 하나일 것 이므로, 반복문을 돌려 입력 인자의 일의 자리 수가 1,3,4,5,9 중 하나와 같다면 true를 return하는 코드를 생각하였다.
function isOdd(num){
let i=1;
let lastLetter=0
let temp_leng=0
while(i<10){
lastLetter=String(num).slice(-1)
if(Number(lastLetter)===i){
return true;
}
i+=2;
}
return false;
}
- Reference Code
function isOdd(num) {
if (num < 0) {
num = -num;
}
while (num >= 0) {
if (num === 0) {
return false;
} else if (num === 1) {
return true;
}
num = num - 2;
}
}
위의 새 가지 경우 모두 알아두면 좋은 방법이라고 생각한다.
첫 번재 방법은 홀수일 때와 짝수일 때의 차이를 이용한 방법(이라고 생각) 이고, 두 번째 방법은 홀수가 될 조건을 이용한 방법이다.
세 번째 방법 또한 짝수롸 홀수일 때의 차이를 이용한 방법(인것 같다.) 이다.
즉 어떠한 문제를 풀 때 중요한 것은, 구해야 하는 변수(정답)에 영향을 끼치는 인자(point)를 찾는 것이 더 효율적이게 코드를 작성하는 방법인 것 같다.
반복문 - 17- isPrime && 18번은 다음 포스팅에서 좀 길게 리뷰를 하겠다.
'Programming Languages > JavaScript & Node.js' 카테고리의 다른 글
[JS/Node][Codestates] 핵심 개념과 주요 문법 - lesson1 (0) | 2021.07.19 |
---|---|
[Js/Node][Codestates] JS/Node 배열, 객체 (1) | 2021.07.09 |
[JS/Node][CodeStates] JS/Node 기초3 (0) | 2021.06.09 |
[CodeStates] [ Coplit ] 변수와 자료형&조건문 Review (0) | 2021.06.06 |
[CodeStates] JS/Node 기초2 (0) | 2021.06.04 |