위코드의 코트카타는 매주 2인 1조로 랜덤하게 짝을 지어 진행된다. 입코딩 하는 역할과 손코딩 역할을 나누어 면접 대비와 커뮤니케이션 대비를 할 것을 권장한다. 파이썬 또는 자바스크립트를 사용해 풀이한다.
처음에는 역할을 나눠서 진행을 해보려했지만, 처음 해보는 알고리즘 문제풀이 자체가 낯설었다. 로직을 짜는 것과 코드 쓰는 것도 아직 익숙하지 않았다. 어떤 방법이 좋을지 멘토님께 여쭤보았더니 아래와 같은 답변을 받았다.
코트카타 관련 멘토님 Q&A
Q. 처음부터 같이 끙끙거리는게 좋은가요? 아니면 혼자 풀고나서 모이는 게 좋은가요?
A. 40분 혼자 풀이해보고 20분 역할분담해서 같이 풀기
때문에 문제를 각자 충분히 고민해보고 서로 설명해주는 방식으로 진행했다. 개인적으로는 4번 문제 코드 리팩토링도 해보았다. 동기들과 같은 문제를 풀다보면 제각기 다른 접근으로 풀이를 한다는 점이 흥미로웠다. 같은 로직이라도 파이썬과 자바스트립트 문법에 따라 다르게 작성해보는 방법도 알 수 있었다. 여러 코드를 보고 대화를 나누다보니, 숏코딩이 멋있어 보이지만 가독성이 좋고 효율이 높은 코드가 좋은 코드라는 걸 몸소 체감하게 되었다. 다음주에는 역할분담해서 풀이하는 것도 시도해보고 싶다.
코트카타 주의사항
- 정답 맞추기 위한 훈련 아님
- 안풀린다고 종일 붙잡고 있으면 안됨. 1시간만 할 것.
- 정답 맞출거 아니면 왜? 훈련!
- 누적해주면 컴퓨팅적 사고 발달
- 문제해결 역량 보여주기
- (2인1조) pair programming / communication /
- 작성한 코드를 생각하는 로직을 정확한 용어와 함께 말로 하는 연습.
- 코드는 쓰이는 경우보다 읽히는 경우가 많음. 가독성 신경쓸 것.
DAY1 QUIZ
twoSum함수에 숫자배열과 '특정 수'를 인자로 넘기면,
더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열
const twoSum = (nums, target) => {
for (i=0; i<nums.length; i++) {
for (j=i+1; j<nums.length; j++) {
if(nums[i] + nums[j] === target){
return [i, j];
}
}
}
DAY2 QUIZ
reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
x: 숫자
return: 뒤집어진 숫자를 반환!
Math.abs()함수를 사용해 풀었다.const reverse = x => {
let plus = Math.abs(x).toString();
let re = + (plus.split('').reverse().join(""));
// string을 number로 바꿔주는 방법 : + 붙이거나 Number()하거나
if (x < 0) {
return -re;
} else {
return re;
}
}
Main.sign() 함수를 사용해, 아래와 같이 한 줄로도 표현 가능하다.parseInt()와 Number() 차이가 헷갈렸는데, Number()는 정수값만 받을 수 있다. 값에 012나 -012처럼 숫자 앞에 0이 포함되면, 받아오는 값이 손상된다. const reverse = x => {
parseInt(x.toString().split("").reverse().join(""))*Math.sign(x);
}
DAY3 QUIZ
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
const getLengthOfStr = str => {
let arr = []; // 새 배열 변수 arr 정의
let newStr = ""; //새 문자열 변수 newStr 정의
let maxLength = 0; // 변수 maxLength 정의
for (let i in str) {
if(newStr.includes(str[i])) {
newStr = newStr.slice(newStr.indexOf(str[i]) + 1);
}
newStr += str[i];
maxLength = Math.max(maxLength, newStr.length);
}
return maxLength;
}
DAY4 QUIZ
숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.
num: 숫자
return: true or false (뒤집은 모양이 num와 똑같은지 여부)
삼항조건연산자를, 아닐 때는 if문을 쓰자. 코드는 쓰는 데 걸리는 시간보다 읽는 데 걸리는 시간이 길기 때문에 가독성을 높이는 게 우선이다.const sameReverse = num => {
const numStr = num.toString();
const numArr = numStr.split("");
const newNum = numArr.reverse().join("");
return numStr === newNum ? true : false;
};
산술 연산자
//로 몫을 구할 수 있고, %로 나머지를 구할 수 있다.%로 나머지를 구할 수 있는 건 같으나, 몫만 구하는 연산자는 없다.parseInt()또는 Math.floor() 내장 함수를 사용해 함수 안에 수식을 넣어 몫을 구할 수 있다.let strNum = num.toString();
let leng = strNum.length;
let halfLeng = Math.floor(leng/2);
for(i=0; i < halfLeng; i++) {
if(strNum[i] !== strNum[(leng-i-1)]) {
console.log(false);
break;
}
} console.log(true);
선아 님 정리 bbbb