1. 수도코드
알고리즘 문제들을 풀다 보면 간단한 문제도 있지만 문제를 어떻게 해결해야 할 지 막막한 경우들이 있다. 이럴 때 코드부터 쓰는 것보다 수도코드를 쓰며 흐름을 파악할 필요가 있다. 요구사항이 하나 이상인 문제는 여러 개로 쪼개서 생각하고 어떤 개념과 연관되는지 생각해봐야 한다.
2. 코드 스타일링 : 가독성 좋은 코드를 작성하는 것
→ 코드 스타일링을 해야 하는 이유는 내 코드를 동료가 이해하지 못하는 경우를 방지할 수 있기 때문이다. 또한, 오류가 발생했을 때에도 코드 가독성이 좋아야 더 쉽게 오류를 발견할 수 있다.
1. 들여쓰기 : 스페이스 > 탭 (혼용 X)
2. 이름 짓기 : 변수명은 값의 본질적인 의미를 갖고 있어햐 한다.
- 데이터의 모음이 할당된 변수의 이름은 복수 명사가 좋다.
- boolean이 할당된 변수는 is / are을 붙인다.
- 함수의 이름은 동사로 시작하는 것이 좋다.
- 변수 할당값이 Class인 경우 주로 변수의 첫 글자는 대문자를 사용한다. (Javascript ES6 문법 - class)
- 상수는 모두 대문자로 적는다. - ex) const MAX_ITEMS_IN_QUEUE = 100
3. 기호 및 구두점
- Javascript의 문자열 표기 시 작은 따옴표를 권장한다. (HTML의 큰 따옴표와 구분하기 위해)
- 줄 바꿈이 필요한 문자열을 정의할 때는 `(백틱) 사용을 권장한다.
- 중괄호로 끝나는 statement(if, for, while문)는 이미 종료가 암시되었으므로 세미콜론을 사용하지 않는다.
- 함수 표현식의 끝에는 세미콜론을 사용한다.
4. 연산자와 키워드
- 엄격한 비교 연산자를 사용해야 한다.
- 삼항 연산자(?)는 가독성이 좋은 경우에만 사용한다.
- not 연산자(!)는 바로 앞에 붙여서 사용한다.
5. 짧게 쓰기 : 코드는 실행되는 한, 되도록 짧게 쓰자!
- 필요한 선언인지 고민해보자.
- boolean으로 평가되는 표현문은 바로 return한다. - ex) return A > B
※ 참고 사이트
google.github.io/styleguide/jsguide.html
ko.javascript.info/coding-style
3. 알고리즘 예제
1. 문자열을 구성하는 각 단어의 첫 글자로 이루어진 문자열을 리턴
function firstCharacter(str) {
if (str === '') {
return '';
}
let words = str.split(' ');
let result = '';
for (let i = 0; i < words.length; i += 1) {
result = result + words[i][0];
}
return result;
}
2. 2차원 배열을 입력받아 'B'의 위치 정보를 요소로 갖는 배열을 리턴
function findBugInApples(arr) {
for (let i = 0; i < arr.length; i += 1) {
for (let j = 0; j < arr[i].length; j += 1) {
if (arr[i][j] === 'B') {
return [i, j];
}
}
}
}
//2차원 배열이므로 이중 반복문을 이용해 각 배열의 요소 비교
3. 암호화된 문자열과 암호화 키를 입력받아 복호화된 문자열을 리턴
카이사르 암호는 평문을 암호키 secret개만큼 (오른쪽으로) 평행이동시켜 암호화한다.
function decryptCaesarCipher(str, secret) {
let alpha = 'abcdefghijklmnopqrstuvwxyz'; //알파벳
let result = '';
for (let i = 0; i < str.length; i++) {
if (str[i] === ' ') {
result += ' '; //공백은 그대로 둔다.
} else {
let asis = alpha.indexOf(str[i]); //현재 문자의 알파벳 순서를 구한다.
let tobe = (asis - secret + alpha.length) % alpha.length;
//복호화는 반대 방향으로 이루어기 때문에 seceret을 뺀다.
//asis < secret인 경우가 존재하므로 alpha.length를 더하고 전체를 나눠서 나머지를 구한다.
result += alpha[tobe];
}
}
return result;
}
4. 문자열에 연속되는 문자가 있는 경우, 연속 구간을 반복되는 수와 문자로 조합한 형태로 압축해 리턴
(3개 이상 연속되는 문자만 압축한다.)
function compressString(str) {
let before = str[0];
let count = 1;
let result = '';
str = str + ' ';
for (let i = 1; i < str.length; i++) {
if (before === str[i]) { //동일한 문자가 반복될 경우
count++;
} else { //이전과 다른 문자인 경우
if (count >= 3) { //반복된 횟수가 3 이상일 경우에만 압축을 한다.
result = result + `${count}${before}`;
} else {
result = result + before.repeat(count);
}
before = str[i];
count = 1;
}
} return result;
}
'TIL 👩🏻💻' 카테고리의 다른 글
TIL : 유효성 검사 (0) | 2021.03.19 |
---|---|
TIL : DOM (0) | 2021.03.18 |
TIL : 고차함수 (0) | 2021.03.16 |
TIL : Twittler 목업 구현하기 (0) | 2021.03.15 |
TIL : Javascript Koans (0) | 2021.03.12 |