20210325-TIL

나영원·2021년 3월 25일
0

T.I.L.

목록 보기
130/145

오늘 할일

  • 채용공고 읽기

  • 이력서 양식 고치기

  • 자소서 작성하기

  • 알고리즘 문제 풀기

오늘 한 것 & 배운 내용

알고리즘 문제 풀이

그룹 단어 체커

  • 내풀이
    • 단어들이 이미 존재했는지 비교하려면 기존 단어들을 저장할 필요가 있다고 느껴 map을 사용해보기로 했다
      • map을 사용한 이유는 연속되는 단어를 key로 해서 저장해도 중복을 허용안하니 불필요하게 저장하는 데이터가 없을 것 같았고 해당 단어가 이미 존재했는지 체크할때 해당 단어를 key로 검색하면 좋을 것 같아서 였다
    • String에 단어들을 하나씩 뽑아서 이전 단어와 비교하여 다르면 map에서 검색해서 해당 key로 저장된 값이 있는지 확인한다
      • 없다면 새로운 연속된 문자가 등장한 것이기 때문에 이전단어에 저장해놓고 map에다가 해당단어를 저장한다
      • 있다면 연속된 단어가 아닌 단어가 등장한 것이기 때문에 반복문을 빠져나와 다른 문장을 체크하도록 한다
    • 풀이 과정 중 테스트 문장간에 이전단어와 map에 대한 초기화가 이루어 지지 않아 원치 않는 결과가 나와서 디버깅을 하였다
      • 테스트가 여러개 반복되는 문제에서는 초기화가 중요하다는 걸 다시한번 생각하게 됬다
  • 다른사람 풀이
    • map을 사용하지 않고 boolean 배열을 사용한 방법이 성능이 더 조금 좋았다
      • boolean 배열을 알파펫 갯수인 26개 까지 만들고 이미 존재했는지 안했는지를 true/false로만 체크하는 것이다
      • 배열의 index를 활용해서 빠르게 값들을 체크하는 방법을 익혀놓는게 도움이 될 것 같다

크로아티아 알파벳

  • 내풀이

    • String 배열을 만들어 크로아티안 알파벳을 넣어준다
    • 한단어 돌때마다 단어의 수를 +1해준다
    • 만약 단어가 특수문자이거나, i거나 j 인지 체크한다
      • 맞다면 이전단어와 현재단어를 합친 것이 크로아티안 알파벳인치 체크한다
        • 맞다면 단어가 "z="이면서 그이전단어가 d인지 체크한다
          • 맞다면 총단어수에서 -2를 해준다 (3단어를 1개로 쳐야되니 -2를 해준다)
        • 아니라면 총단어수에서 -1만 해준다(2단어를 1개로 쳐주기 위해 -1을 해준다)
    • 디버깅을 하는 과정에서 &와 &&의 쓰임새를 반대로 생각하고 있었다는 것을 발견해서 다시한 정리해본다
      • &와 &&는 모든 조건이 만족해야 true를 반환한다
      • &&를 쓰면 하나의 조건이라 false라면 더이상 다음 조건을 체크하지 않는다
        • &라면 하나의 조건이 false라 할지라도 마지막 조건까지 체크한다
  • 다른사람풀이

    • 나는 이전글자를 체크해서 비교했지만 다른사람들은 다음글자가 맞는지체크했는데 이게 더 효율적인 방법일수도 있는 것 같다
      • 조건문에 조건이 여러개 있는 경우 조건에 괄호를 쳐서 우선순위를 줄 수 있다는 것을 배웠다
  • 사담

    • 알고리즘을 풀다보니 해법은 여러개가 있지만 풀어나가는 사람이 성능과 가독성 측면에서 고려하여 선택을 해나가는 것 같다
      • 가독성을 위해 주석을 달기로했는데 잘지켜지지 않아 반성을 하고 의식적으로 주석을 달면서 코딩할수있도록 해야겠다
      • 조건을 체크할때도 역방향보다는 순방향으로 하여 읽는사람이 읽기 편하게 해주는것도 중요한 요소인 것 같다
    • 풀이는 항상 노트와 함께 최대한 풀어서 적어가면서 하는 습관을 들여야 될것 같다.
      • 눈으로 보면서 풀면 금방 풀걸 머리로 풀다가 오래걸리고 집중력이 떨어진게 한두번이 아닌 것 을 반성하면서 생각해 ㅗ았다

수 정렬하기2

  • 풀이 완료 못함
    • 첫풀이는 모든 수를 배열에 넣어놓고 이후 버블정렬을 구현하여 값을 출력하는 것이었다
      • 결과값은 제대로 나오는것 같은데 시간초과가 떠버렸다
    • 혹시나해서 Array.sort로 진행해보았는데 역시 시간초과가 발생한다
    • 정렬방식의 문제로 생각하고 빠르게 정렬알고리즘을 검색하여 그중 퀵정렬 방식을 배워보았다
      • 퀵정렬 강의 : https://www.youtube.com/watch?v=7BDzle2n47c
      • 위의 방식을 빠르게 적용해보기위해 예제 그대로 적용해서 풀이를 돌려보았더니 똑같이 시간초과가되었다
      • 나의 공부시간도 초과가 되서 오늘 퀵정렬 배운것 정리 + 문제풀이는 내일하는 것으로 하고 마무리를 하였다

채용 공고 읽기

  • 용어정리
    • SVN(Subversioin)
      • git과 같은 형상관리/ 소스 관리 툴
      • svn은 중앙 집중식 버전관리 시스템이고 git은 분산 버전 관리 시스템이라는 차이가 있다

이력서 작성

  • 이력서 양식을 새로운 형식으로 변경하면서 기존 내용도 조금씩 추가로 수정하였다

    • 다시 한번 돌아보면서 제대로 작성안된 부분도 있고 오타도 있는 것을 보며 반성하게 되었다
  • 어제 양식을 반영하여 아래사항 들을 중점적으로 수정 및 작성해보았다

    • 새로운 양식적용
    • 채용공고 맞추어서 역량 수정
    • 프로젝트 기여한점 배운점 수정
    • 경력사항 양식변경
    • 자기소개서에 기업공고에 내용반영하고 프로젝트 경험 다른 것으로 수정
  • 1시부터 8시까지 저녁시간 1시간빼고 6시간정도를 투자해서 작성해보았는데 조금 발전사항이 있으면좋겠다

    • 일단 커리어매니점에게 피드백을 받기로 하였고 주변에도 피드백을 요청했으니 기다려보고 내일 더 수정해봐야 될 것 같다

내일 할일

  • 이력서 수정

  • 알고리즘 문제풀이

  • 채용공고 읽기

profile
배우는 개발 일기

0개의 댓글