[우테코5기] 우아한 테크코스 5기 프리코스 1주차 문제2 회고록

popolarburr·2022년 11월 27일
0

우아한테크코스

목록 보기
2/2
post-thumbnail

우아한 테크코스 1주차 (공통)미션

-> 7가지의 문제로 구성된 온보딩 미션.

  • 미션은 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항 세 가지로 구성되어 있다.
  • 세 개의 요구 사항을 만족하기 위해 노력한다. 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행한다.
  • 기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다.

📚 문제 2번에 대한 회고록

문제 2번 역시 1번과 같은 형식으로 출제될 것이라고 생각했던 나로써는, 1번을 처음 봤을때 처럼의 당혹감을 느끼진 못했다. 1번에서 나름 고전하던 나는 2번 문제를 봤을 때는 난이도적인 면에서는 괜찮다고 느꼈다. 문자열에 대해 깊이 고민해볼 수 있을 것 같았고, 이를 코드로 녹아내는 것 자체도 공부가 될 것 같았다.

📖 문제 접근

문자열을 가지고 현재 인덱스와 다음 인덱스의 값이 같으면 그 문자열에서 삭제하고, 수정된 문자열을 다시 인덱스끼리의 비교가 이루어져야 한다고 생각하여 while-loop를 사용하기로 하고, 인덱스별 비교를 위해 새로운 배열을 생성하기로 마음 먹었다.

🎯 예외 처리

 - 입력값에 에러가 없는지, 입력 양식이 유효한지 검사한지 검사 

  - 문자열의 최소 길이인 1일때 확인 ->  minLengthCase()
  - 입력값이 최소 길이와 최대 길이 사이인지 확인 -> overInRange()

  - 영어 알파벳 소문자를 제외한 다른 문자(숫자, 특수문자, 한글 등) 확인 -> inputTypeError()

처음에는 내가 생각한 모든 예외처리에 대한 함수를 작성하고 시작했다.
기존 문제처럼 예외처리를 통과한 입력값들에 한해서 로직을 수행하는 식으로 코드를 작성했다.

⌨ 코드 작성

현재 인덱스와 다음 인덱스 값을 비교하기 위해서는 비교하는 인덱스의 기준점이 다음 인덱스로 설정했다. 인덱스는 문자열보다 -1만큼 존재하기에 다음 인덱스를 기준점으로 설정하고 이전 인덱스와 비교를 해야 수월할 것 같았다.
그렇게 작성한 코드는

  const compareArray = [];
  let cnt = 0;

  while (cnt < cryptogram.length) {
    if (compareArray[compareArray.length - 1] !== cryptogram[cnt]) {
      compareArray.push(cryptogram[cnt]);
    } else if (compareArray[compareArray.length - 1] === cryptogram[cnt]) {
      compareArray.pop();
    }
    cnt++;
  }

로직 설명은 이렇다.

새로운 배열을 생성하고, 문자열의 0번째 인덱스와 그전 인덱스(-1, 값 x)의 비교를 시작으로, 카운트를 문자열의 길이보다 적을때 (길이-1)까지 돌리고, 인덱스끼리 같지 않으면 배열에 넣고, 같으면 배열에 빼는 식.

사실 배열(스택)을 사용하지 않고 사용해보려고 했지만 다양한 방법중에서 스택으로 하는 풀이가 가장 단순하고 편리할 것 같았다. 그렇기에 스택을 사용했다.

📌 느낀점

사실 이러한 스택과 큐같은 자료구조를 이용해서 문제를 푸는 방식에 큰 자신감이 없었다. 사용법과 동작 논리는 이해하고 있었지만 실질적으로 손이 안가는 것이 현실이였다. 그렇기에 이번에도 스택을 생각하지 못하고 다른 방향으로 풀려고 했었다. 그러나 생각을 곱씹을 수록 스택을 활용하여 문제를 풀게되면 쉽게 풀릴 것이라고 판단하여 스택을 사용하게 됐다. 오랜만에 사용하는 것이라 어색하기도 했지만 이번 기회에 스택을 조금이나마 실전에서 사용함으로써 친밀도도 높였고, 다른 많은 분야에서 적용시킬 수 있을 것이라는 자신감이 생겼다.


[링크] : 제출 깃허브

profile
차곡차곡

0개의 댓글