우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 2번
📋 문제 2번
https://github.com/woowacourse-precourse/javascript-onboarding/blob/main/docs/PROBLEM2.md
⚙️ 기능 목록
1. 문자에서 한글자 이상 같은 글자로 연속되는 부분이 있다면 삭제해준다.
2. 연속되는 부분들을 삭제를 하고 남은 글자들끼리 다시 이어 붙였을 때 연속되는 부분이 새로 생긴다 하더라도 바로 삭제하지 않는다.
ex)
- "browoanoommnaon"
- "browoannaon"
- "browoaaon"
- "browoon"
- "brown"
3. 이어 붙여 만들어진 단어를 다시 처음부터 확인하여 연속되는 글자들을 있는지 확인하고 있다면 삭제한다.
4. 더 이상 연속되는 글자가 없을때까지 2~3번을 반복한다.
5. 남은 문자를 출력한다.
😥 미흡했던 점
- let과 const를 적절하게 사용하지 않은점
- 불필요한 변수를 선언한 점
- 함수의 배치
- 함수명 단어 3개 이상
- 예외사항을 제대로 처리 못함.
📌 고려사항
- 클래스로 구현
- 메소드는 한 가지일만 하기
- let, const 적절히 사용
- 메소드명 단어 3개 이하
- 메소드는 사용 순서대로 위에서 부터 아래로 배치
- 메소드 10줄 제한
- depth 최대 2
⛔ 주의
사실 이 문제는 예외사항을 어디까지 생각하느냐에 따라 풀이 난이도가 차이난다.
만약, 짝수 단위로 연속된다면 카카오 기출 인형뽑기 풀이 처럼 간결하게 풀 수 있지만 홀수 단위도 나온다면 말이 달라진다.
예시에는 없었지만 홀수 단위까지 생각해야 된다 생각하여, 다른 문제들보다 까다롭게 느껴졌다.
좀 더 깔끔하게 풀 수 있었지만, 메소드 10줄 제한과 depth 제한을 지키기 위해 delete와 change 메소드를 나누어 주었다.
만약, 메소드 줄 제한을 15줄로 늘린다면 change 메소드 코드를 delete 메소드 안으로 넣어주면 된다.
📜 리팩터링
https://github.com/soohyun-dev/javascript-onboarding/blob/soohyun-dev/src/problem2.js
class Deduplication {
constructor(word) {
this.word = word;
this.target = "";
}
deduplicate() {
if (this.isDuplicate()) {
this.target = "";
this.word = this.delete();
return this.deduplicate();
}
return this.word;
}
isDuplicate() {
let duplicate = false;
for (let i = 1; i < this.word.length; i++) {
if (this.word[i] === this.word[i - 1]) {
duplicate = true;
break;
}
}
return duplicate;
}
delete() {
let stack = [];
let check = false;
this.word.split("").forEach((letter, idx) => {
[stack, check] = this.change(stack, check, letter);
if (idx === this.word.length - 1 && check) stack.pop();
});
return stack.join("");
}
change(stack, check, letter) {
if (this.target !== letter) {
this.target = letter;
if (check) stack.pop();
stack.push(letter);
check = false;
} else check = true;
return [stack, check];
}
}
function problem2(cryptogram) {
const deduplication = new Deduplication(cryptogram);
return deduplication.deduplicate();
}
module.exports = problem2;
'성장기록 > 우아한테크코스' 카테고리의 다른 글
우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 4번 (0) | 2022.11.27 |
---|---|
우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 3번 (0) | 2022.11.27 |
우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 1번 (0) | 2022.11.25 |
우아한테크코스 5기 프론트엔드 프리코스 그 이후 (0) | 2022.11.24 |
우아한테크코스 5기 프론트엔드 프리코스 4주차 회고 (0) | 2022.11.23 |