본문 바로가기

코드스테이츠

2021년 4월 8일 코드스테이츠 DAY-4(JS/Node)(Coplit)(pseudo code)

반응형

TIL

 

코플릿(Pair) String

반복문(Chapter) Loop

코플릿(Pair) Loop

Sprint Review(Zoom)

Pair Review(Survey)

 


오늘의 다룰 내용

1. 반복문 코플릿 (풀 때 애먹은 문제들만 발췌하였다.)

2. 수도코드(+ 코플릿을 통해 알게된 점)

3. 느낀점 (수도코드의 중요성 및 첫 Pair Review)


코플릿(Pair) Loop

 

03_isOdd

 


해당내용은 삭제하였습니다.


//Pseudo Code
//1. 입력된 num이 홀수인지 짝수인지 구별하고 홀수이면 true를 짝수이면 false를 반환하는 문제.
//2. 반복문을 안쓴다면 더 빨리 판단할 수 있지만 while을 반드시 써야하므로 넣었으나, 반복문의 의미는 없앴다. 
//3. 홀수 인지 짝수 인지를 구분하기 위한 임의의 value에 i를 넣어주고 조건문에 넣는다.
//4. 임의의 value &(비트 and 연산자) 1 === 1이라면 홀수이므로 true를 반환 그렇지 않다면 false를 반환.

이 문제를 통해 알게된 점 : 비트 and 연산자(&)

1. 출처 : stackoverflow.com/questions/44713703/check-odd-numbers-without-modulo-operator

2. 구글링 중 위 링크의 스택오버플로우의 답변을 보고 영감을 얻게 되었고, bitwise operator라는 개념을 알게되어 더욱 구체적인 검색을 할 수 있었다. 검색결과는 아래 3번이다. 

3. 비트 AND 연산자 ( & )는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 해당 비트와 비교 합니다. 양쪽 비트가 모두 1이면 해당 결과 비트는 1로 설정됩니다. 그렇지 않으면 해당 결과 비트는 0으로 설정됩니다.

출처 : docs.microsoft.com/ko-kr/cpp/cpp/bitwise-and-operator-amp?view=msvc-160

4. 쉽게 말하자면 홀수 & 홀수는 1이, 짝수 & 짝수는 0이 반환된다. 


12_getMaxNumberFromString

 

해당내용은 삭제하였습니다.

//Pseudo Code
//1. 1안, 2안, 3안이 있는데 1안은 반복문을 한번만 사용하는 것이고,
//   2안은 이중 for문을 나중문제에서 경험한 후에 이 문제에서도 적용할 수 있지않을까하여 만든 코드이다.
//   3안은 개인적으로 제일 짧고 깔끔하다고 생각되는데 문제에서는 for문을 반드시 써야됬으므로 일단 논외다.
//2. 빈문자열은 0을 반환해야하므로 먼저 조건문을 작성한다. 
//3. 입력값의 길이를 가져와 반복문의 조건으로 넣고 str[i]와 str[i + 1]중 큰 값을 임의의 변수에 재할당 한다.
//4. 여기서 i + 1이 입력값의 길이와 같다면 i는 마지막 글자이므로 바로 return한다.
//5. 반복문이 끝난 후 임의의 변수에는 제일 큰값이 있으므로 그 값을 return한다.

 

 

13_replaceAll

 

해당내용은 삭제하였습니다.

//Pseudo Code
//1. str의 길이를 추출하는 변수를 하나 만들고 이를 반복문의 조건으로 쓰자.
//2. 빈문자열을 변수에 담아주자.(반복문 속 조건문에서 새로운 문자열 생성을 위해(재할당의 방식을 쓸것이기 때문에))
//3. 반복문 안에 str[i]와 from이 같다면 i번째에는 neuStr 문자열에 str[i]대신 from을 삽입하는 경우을 만들고 
//   그렇지않은 경우(from에 해당하는 문자가 없을 경우)에는 str[i]을 넣는 경우 또한 만들어준다.  
//4. for문 밖에서(재할당이 끝난 마지막 문자열을 추출해야하기 때문에) 끝까지 재할당된 neuStr을 return. 

 

16_getSumOfFactors

 

해당내용은 삭제하였습니다.

//Pseudo Code
// 1. 약수의 합을 구하기 위해서는 약수를 구해줘야하고 그 약수들을 더해야한다.
// 2. num을 1부터 num까지의 수로 나누어줄것이고 이때 나머지가 0인 것들을 빈배열에 담는다. 
// 3. 반복이 끝난 후 배열에 담긴 것들을 reduce를 통해 더해준다.

이 문제를 통해 알게된 점 : reduce((prev, curr) => (prev + curr),0)

1. 출처 : developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

2. 배열의 합을구글링 중 위 링크를 보고 영감을 얻게 되었고, reduce라는 함수를 알게되었다.

3. Array.reduce(function(accumulator, currentValue, currentIndex, array) { return accumulator + currentValue; });

4. 3.의 함수를 화살표 함수로도 나타낼 수 있다. Array.reduce( (prev, curr) => prev + curr );

5. initialValue에 값을 넣어주지 않으면 index 1부터 시작해 콜백함수를 실행한다.

 


17_isPrime

 

해당내용은 삭제하였습니다.

// Pseudo Code
// 1. 소수란 1과 자기 자신으로만 나눠지는 수이다.
// 2. 그러면 1부터 시작해서 입력된 값까지 나누어진 수가 두개이면 소수일 것이다.
// 3. 빈배열을 만들고 반복문을 돌려서 한 턴마다 나머지가 0인지를 체크하고 나머지가 0인 경우에는 빈배열에 i를 넣는 코드를 만들자.
// 4. 이때 만약 array의 length가 2이면 소수라고 판단하고 true를 return하자 

 

18_listPrimes : 내가 못 푼 문제이다. sprintreview시간에 들은 해설을 바탕으로 debugger;를 해가며 코드의 흐름을 읽어보았다.

 

해당내용은 삭제하였습니다.

//코드의 흐름
//1. num에 4가 들어올 경우. result 변수가 2로 할당된다.
//   (2가 소수이고 출력값을 '2-3-5-7-11-13-17'의 형태로 만들기 위해 미리 선언한 것 같다.
//    미리 선언하지 않는다면 '-2-3-5'같은 형태로 출력될 것이다.)
//2. i가 4보다 작기때문에 i = 3으로 선언되고 {}안에서 isPrime은 true로 할당된다.
//   (i보다 1작은 수인 j로 나누어 지지 않을 때 첫번째 for문 속 if문에서 isPrime이 true일때 
//   result뒤에 -i를 입력시켜 result를 재할당한다.)
//3. 다시 돌아와 i는 4가되는데 num과 같기에 {}가 실행되고, 두번째 for문에서 j는 다시 2가 되어 4를 나눈다.
//   4를 2로 나누니 나머지는 영이되어 if문의 {}가 실행되고 isPrime은 false가 되며 for문은 break된다.
//   첫번째 for문의 if문이 시작되려고 할 때 isPrime은 true가 아니기에 아까 재할당된 result를 반환한다.

 

 


이 문제를 통해 느낀점

1. 17번 문제를 배열에 넣고 배열의 개수로 소수를 판단하는 방식으로 해결하다보니 비슷한 18번 문제를 해결하는데 있어서 사고가 닫혀 있었나 보다.

2. 이중 loop를 써야한다는 제한된 상황이기에 위 코드로 해결하는 것이 베스트 인 것 같다.

3. 알고리즘을 떠올리는 능력이 한참 부족함을 다시 한번 느끼게 된다. 

4.이중 loop의 특징은 loop1이 한번 턴할때 loop2는 loop2의 조건을 전부 돈다는 것을 꼭 기억하자.

5. loop2의 조건에 loop1의 매개변수가 올경우 loop2의 턴하는 숫자는 loop1의 매개변수가 ++할때마다 점점 늘어난다. 


느낀점(수도코드의 중요성 및 내가 받은 첫 Pair Review)

 의사코드는 알고리즘을 사람의 언어로 풀어서 쓰는 것이다. 반복문 코플릿에 들어가면서 작성하기시작했지만 진작 할 걸이라는 후회를 했다. 코플릿을 푸는데 많은 도움이 됨은 물론이거니와 컴퓨터의 사고 방식을 배울 수 있기 때문이다.   

 첫 페어리뷰를 받았다. 나의 잘한점은 "문제를 해결하는데 있어서 적극적으로 참여하는 것과 새로운 방법으로 해결할 수 있는지에 대한 고민"이고 개선하면 좋을 점은 "문제를 해결하는데 있어 새로운 방식을 찾고 집요하게 파고들어 시간 분배에 약간의 어려움"이다. 긍정적인건지는 모르겠지만 둘 다 칭찬으로 들렸다. 하지만 새로운 방식을 찾느라 시간을 지나치게 많이 썼던게 참 페어분께는 죄송하다. 

 

+ 반복문 코플릿을 하며 알고리즘을 짜는 능력이 많이 부족함을 느꼈다. 18번 문제를 풀지못해서 sprintreview시간에 들은 해설을 바탕으로 코드의 흐름을 느껴보았다. 코드의 흐름을 느끼고나니 이중반복문 특성을 다른 코드에서도 활용할 수 있었다. 나는 깨우치는 것은 힘들지만 하나를 깨우치면 그것을 쓰일만한 곳을 찾아내어 집어넣는 능력은 있는 것 같다. 코드스테이츠를 공부하며 스스로 못나보이는 것을 느낀 하루였다. 하지만 포기하지 않음에 또한 자랑스러움 또한 느꼈다. 코드스테이츠 생각이상으로 좋다!

반응형