GitHub ID : soohyun-dev
윤수현의 개발 공간
GitHub ID : soohyun-dev
전체 방문자
오늘
어제
  • 분류 전체보기 (918)
    • 성장기록 (49)
      • 성장기록 (3)
      • 우아한테크코스 (16)
      • 프로젝트 (15)
      • TIL (14)
      • 테오의 스프린트 (1)
    • 프로그래밍언어 (88)
      • C언어 (14)
      • HTML\CSS (12)
      • JavaScript (7)
      • React (23)
      • Python (11)
      • JAVA (14)
      • TypeScript (6)
    • 알고리즘 공부 (736)
      • 코드업 - 파이썬 (108)
      • 백준 - 파이썬 (468)
      • 백준 - 자바스크립트 (125)
      • 프로그래머스 - 파이썬 (1)
      • 프로그래머스 - 자바스크립트 (34)
    • 책 리뷰 (9)
      • 프로그래밍 (3)
      • 독서 (6)
    • 전자기기 (1)
    • 일상, 일기 (18)
    • 기술 세미나 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스풀이
  • 자바스크립트
  • 코테
  • 코딩테스트
  • 프로그래머스자바스크립트
  • 영어독해
  • 백준풀이
  • 프로그래머스
  • 영어
  • 코드업
  • 독해
  • PYTHON
  • 프로그래밍언어
  • 백준
  • 프론트엔드
  • 코딩
  • 코드업파이썬
  • 백준파이썬
  • javascript
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GitHub ID : soohyun-dev

윤수현의 개발 공간

우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 2번
성장기록/우아한테크코스

우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 2번

2022. 11. 26. 23:06

 

우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 2번

 

 

 

📋 문제 2번

 

https://github.com/woowacourse-precourse/javascript-onboarding/blob/main/docs/PROBLEM2.md

 

GitHub - woowacourse-precourse/javascript-onboarding: 온보딩 미션을 진행하는 저장소

온보딩 미션을 진행하는 저장소. Contribute to woowacourse-precourse/javascript-onboarding development by creating an account on GitHub.

github.com

 

 

 

 

⚙️ 기능 목록

 

1. 문자에서 한글자 이상 같은 글자로 연속되는 부분이 있다면 삭제해준다.

 

2. 연속되는 부분들을 삭제를 하고 남은 글자들끼리 다시 이어 붙였을 때 연속되는 부분이 새로 생긴다 하더라도 바로 삭제하지 않는다.

 

ex)

 

  1. "browoanoommnaon"
  2. "browoannaon"
  3. "browoaaon"
  4. "browoon"
  5. "brown"

 

3. 이어 붙여 만들어진 단어를 다시 처음부터 확인하여 연속되는 글자들을 있는지 확인하고 있다면 삭제한다.

 

4. 더 이상 연속되는 글자가 없을때까지 2~3번을 반복한다.

 

5. 남은 문자를 출력한다.

 

 

 

 

 

 

 

 

😥 미흡했던 점

  • let과 const를 적절하게 사용하지 않은점
  • 불필요한 변수를 선언한 점 
  • 함수의 배치
  • 함수명 단어 3개 이상
  • 예외사항을 제대로 처리 못함.

 

 

 

📌 고려사항

  • 클래스로 구현
  • 메소드는 한 가지일만 하기
  • let, const 적절히 사용
  • 메소드명 단어 3개 이하
  • 메소드는 사용 순서대로 위에서 부터 아래로 배치
  • 메소드 10줄 제한
  • depth 최대 2

 

 

 

 

⛔ 주의

 

사실 이 문제는 예외사항을 어디까지 생각하느냐에 따라 풀이 난이도가 차이난다.

 

 

 

https://bmy1320.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Level1-2019-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EA%B2%A8%EC%9A%B8-%EC%9D%B8%ED%84%B4%EC%8B%AD-%ED%81%AC%EB%A0%88%EC%9D%B8-%EC%9D%B8%ED%98%95%EB%BD%91%EA%B8%B0-%EA%B2%8C%EC%9E%84-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-JS

 

프로그래머스 / Level1 , 2019 카카오 개발자 겨울 인턴십 , 크레인 인형뽑기 게임 자바스크립트 , JS

프로그래머스 / Level1 , 2019 카카오 개발자 겨울 인턴십 , 크레인 인형뽑기 게임 자바스크립트 , JS 문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스 코드 중심의 개발자 채

bmy1320.tistory.com

 

 

만약, 짝수 단위로 연속된다면 카카오 기출 인형뽑기 풀이 처럼 간결하게 풀 수 있지만 홀수 단위도 나온다면 말이 달라진다.

 

예시에는 없었지만 홀수 단위까지 생각해야 된다 생각하여, 다른 문제들보다 까다롭게 느껴졌다.

 

좀 더 깔끔하게 풀 수 있었지만, 메소드 10줄 제한과 depth 제한을 지키기 위해 delete와 change 메소드를 나누어 주었다.

 

만약, 메소드 줄 제한을 15줄로 늘린다면 change 메소드 코드를 delete 메소드 안으로 넣어주면 된다.

 

 

 

 

 

 

 

📜 리팩터링

 

https://github.com/soohyun-dev/javascript-onboarding/blob/soohyun-dev/src/problem2.js

 

GitHub - soohyun-dev/javascript-onboarding: 온보딩 미션을 진행하는 저장소

온보딩 미션을 진행하는 저장소. Contribute to soohyun-dev/javascript-onboarding development by creating an account on GitHub.

github.com

 

 

 

 

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
    '성장기록/우아한테크코스' 카테고리의 다른 글
    • 우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 4번
    • 우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 3번
    • 우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 1번
    • 우아한테크코스 5기 프론트엔드 프리코스 그 이후
    GitHub ID : soohyun-dev
    GitHub ID : soohyun-dev
    환영합니다!😊 이곳은 저의 개발에 관한 내용들을 정리하는 공간입니다. 알고리즘 풀이에도 관심이 많아요. 좋은 하루 되세요~! github : soohyun_dev

    티스토리툴바