20210324-TIL

나영원·2021년 3월 24일
0

T.I.L.

목록 보기
129/145
post-custom-banner

오늘 할일

  • 채용공고 읽기

  • 알고리즘 문제 풀기

  • 기술면접 준비

오늘 한 것 & 배운 내용

알고리즘 문제 풀이

뒤집힌 덧셈

  • 내풀이
    • 처음에 든 생각은 StringBuilder에 reverse()메소드를 활용하자는 것이었다
      • 그래서 rev메소드를 만들어서 입력받은 값을 String으로 변환한 후 sb.reverse().toString()을 리턴해주었다
        • 처음엔 int를 sb에 그대로 넣었는데 값이 입력되길래 자동으로 String으로 변환되나 했더니 capacity를 입력받는 파라미터여서 동작을 하지 않아서 String으로 변환시켜 주었다
    • 처음 방법이 성능이 나오지 않아서 직접 int를 reverse하는 메소드가 있나 찾아보니 쉽게 int를 reverse하는 알고리즘이 있었다
      • 이정도는 스스로도 구현이 가능했는데 답을 너무 일찍찾아본게 아쉬웠다
      • 알고리즘을 풀때는 메소드를 사용하기보다는 직접 해결할 수 있는 방법이 있나 찾아보는게 좋은 접근인 것 같다
  • 다른사람풀이
    • 생각보다는 String이나 char를 활용한 방법들이 많이보였고 가장 인상적인 것은 Stack을 활용한 것이었다
      • Stack에 FILO가 rever에 어울리는 자료구조라는것을 생각해보게 되는 예제였다

단어 뒤집기

  • 내풀이

    • 단어들을 뒤집기 위해서 StirngTokenizer로 각 토큰을 받아와서 sb.reverse()를해서 answer sb에 추가해주는 방식으로 문제를 풀이했다
      • st에 다음 토큰이 있나 확인하는 메소드가 있나 찾아봤더니 hasMoreTokens라는 메소드가 있어 찾아볼 수 있었다
    • 수동으로 단어를 뒤집는다고 해도 메소드 사용한 것이랑 성능차가 크게 나지 않을 것 같아서 그대로 답안을 제출했다
  • 다른사람 풀이

    • 이번에도 스택을 이용한 방식으로 먼저 단어를 char 단위로 스택에 담고 ' '를 만나면 스택에 단어들을 pop해서 프린트하고 " "이 아니라면 단어를 add하는 방식으로 풀어나갔다

      • 실제로 돌려보니 시간초과가 나오긴 했는데 rever하는 문제는 stack과 잘어울리는것 같다

누울자리를 찾아라

  • 내풀이
    • 먼저 2차원 배열에 방의 구조를 입력한 후 가로 /세로로 탐색하며 '.' 이있는 경우 count를 ++하고 *이나오거나 한열을 모두 탐색한 경우 count가 2가넘는지 확인해서 answer을 ++해 주어서 풀었다
      • 처음엔 가로 / 세로를 다른 중첩 for문으로 돌렸지만 성능향상을 위해 두개를 합쳐서 하나의 중첩for문에서 돌아가게 만들었다
  • 다른사람풀이
    • 삼항연산자를 통해 벽이나 짐을 만났을 때의 조건문을 간략하게 표현할 수 있었다는 것을 배웠다

BABBA

  • 내풀이
    • 처음에는 StringBuilder를 이용해 실제로 A를 B로 B를 BA로 변경시키는 방식으로 해서 문제를 풀었는데 다풀고나니 메모리초과가 떴다..
      • 한참을 고민했지만 기존 방식으로는 더이상 메모리를 줄이는 방법을 찾지 못했다
    • 그래서 어차피 A와 B의 갯수만 출력하면 되기 때문에 A와 B의 갯수만 변경시키는 방식으로 다시 풀었다
      • 훨씬 간단하면서도 성능좋은 해결방법이 되었다..
    • 무조건 구현하는게 아닌 문제에서 원하는 답을 명확히 알고 풀어야 되는점을 배웠다
  • 다른사람풀이
    • 대부분 비슷하게 풀었지만 직접 모든값을 배열에 저장하고 풀어낸사람도 있었다
      • 이것도 DP라고 할수있을진 모르겠지만 계산값을 저장하고 그 이전 계산값들을 활용하는 방식이 메모리나 시간상 성능에 도움이 되는구나라는걸 배웠다

약수들의 합

  • 내풀이

    • 2부터 n-1까지 모두나누어서 나머지가 0인값들의 합과 n을 비교해서 같으면 StringBuilder로 합쳐놓은 약수들의 합이, 같지 않으면 is NOT perfect가 출력되도록 하였다

      • 여러개가 출력되는 것 같아서 성능을 위해 BufferedWirter를 통해 출력을 하였다
  • 다른사람풀이

    • 약수들을 작은수부터 구해서 출력하는 것이기 때문에 큐를 이용한 풀이방법이 존재했다

    • 자기자신을 제외한 약수의 최대 수는 n/2이라는 성질을 이용하여 약수 구하는 범위를 줄여주는 방법도 있었다

    • 마지막으로 약수들은 서로 곱해서 n이 나오는 성질이있다.

      • 예를들면 30의 약수인 10과 3은 곱해서 30이 나오게된다
      • 이걸 분기점을 나눠서 반만구하면 나머지 반은 n에서 나눠주는 방식으로 계산으로 구할수 있게 된다
        • 위의 분기점은 n의 제곱근이다
          • n의 제곱근까지 약수를구하고 n/약수를 하면 반대편에 있는 약수까지 동시에 구할수가 있다
    • 참고

채용공고 읽기

  • 용어정리
    • Dropwizard
      • Java의 경량 Rest Api 프레임워크이다
      • 모듈화가 잘되어있으며, java 안정된 라이브러리들을 사용하였으며, 모던 자바에 걸맞는 방식을 사용하기 쉽게 패키징 되어있다
      • Aribnb에서도 사용하는 프레임워크

이력서 및 자소서 정비하기

  • 이전에 지원했던 곳에서의 결과들이 좋지 않아 변화가 필요하다고 느껴 커리어매니저님에게 상담을 신청하고 이력서와 자기소개서를 수정한뒤 지원을 이어나가기로 했다

    • 그래도 계속적인 피드백을 받기위해서는 하루에 하나 지원하는 것은 계속 유지해 나가야 된다고 생각이 든다
  • 매저님과의 통화이후 자소서의 지원동기가 너무 무난하고 각 기업에 맞춰서 특화되어 써있지 않은 점이 가장 큰문제점이라고 얘기해주셨다

    • 그외에도 공고에 맞추어서 지원하는 것과 새로운 이력서 양식과 가독성있게 경력을 정리하라는 피드백을 받았다
    • 내일 까지 피드백 받은 부분을 적용해서 이력서를 작성하기로 하고 상담을 마무리하였다
  • 피드백을 듣고 나의 강점을 각 기업에 맞게 지원동기와 포부를 적었어야 됬는데 너무 작성하기 편한쪽으로 접근을 한 것 같아서 반성이 됬다

    • 사실 스스로도 부족함을 느끼고 있었지만 프로젝트 경험 및 나의 강점을 잘 정리해서 적용하는 부분이 어렵게 느껴져서 어물적 넘어가다보니 이런 상황이 온것 같아서 더 반성이 되는 부분이다
  • 강점들을 나열 하다보니 생각보다 많은 걸 느꼈는데 이것을 어떻게 구체적인 사례와 함꼐 이야기해볼까 더 고민을 해보면 좋을 것 같다

    • 적다보니 겹치는 부분들도 있으니 깔끔하게 정리해서 정리해두고 자소서 쓸때마다 꺼내쓰면 더 좋을 것 같아서 정리를 시작했다

내일 할일

  • 채용공고 읽기

  • 이력서 양식 고치기

  • 자소서 작성하기

  • 알고리즘 문제 풀기

profile
배우는 개발 일기
post-custom-banner

0개의 댓글