21년 1월 20일

한 일

  • 프로그래머스의 크레인 인형뽑기 게임, 이상한 문자 만들기, 구명보트, 섬 연결하기를 풀었다.

    1. 크레인 인형뽑기 게임:
      • 주어진 규칙에 맞게 구현만 하면 되는 레벨1짜리 문제였다.
    2. 이상한 문자 만들기:

      • 마찬가지로 주어진 구현만 하면 되는 쉬운 문제였다.

      • 하지만 문제를 자의적으로 해석해 틀리고 말았다.

      • 공백으로 구분된 문자들을 기준으로 짝수번째는 대문자 홀수번째는 소문자로 바꾸는 문제였다.

      • 쉬운 문제였는데 틀리고 말았다.

        1. 나는 자의적으로 해석하여, 공백을 기준으로 단어를 split한 후 대문자,소문자를 적용하고나서 다시 공백으로 합쳤다.

        2. 문제에서 각 문자들이 공백 하나로만 구분된다거나 맨마지막 단어 뒤에 공백이 없다는 조건이 없었다.

      • 문제를 제대로 읽고, 문제에서 제약조건으로 알려주지 않은 모든 경우의 수를 생각하며 풀어야 한다.

    3. 구명보트:

      • 풀었던 문제인데도 효율성에서 시간초과가 나서 결국 답을 보고 풀었다.

      • 무게순으로 정렬 후 순회하며 풀어나가는 문제이다.

      • 순회하는 기준을 어디로 두냐의 문제였다.

        1. 무게가 작은 사람을 기준으로 순회한다면, 같이 보트를 태울 사람을 최대무게부터

          현재 무게 더해도 한계를 안넘는 사람을 찾을 때까지 줄여나가며 찾아야 한고 못 찾으면 현재 무게만 태운다.

          (모든 사람의 무게가 limit인 경우 항상 이중포문을 돌게 된다.)

        2. 무게를 큰 사람을 기준으로 순회한다면, 같이 보트를 태울 사람을 찾을 때, 최소무게+현재무게가 한계를 안넘으면 태우고,

          한계를 넘으면 현재 무게만 보트에 태우면 된다.(무게가 큰 사람부터 순회하기 때문)

      • 시간초과가 나는 것을 보고, 도저히 해결못하겠다고 생각했는데 기준만 다르게 생각하면 되는 문제였다 ㅠㅠ

    4. 섬 연결하기:

      • 그냥 크루스칼 알고리즘으로 풀라고 던져준 문제 같았다.
      • union-find 기법과 kruskal 알고리즘으로 간단하게 풀 수 있었다.

잘못한 것

  • 한달의 중간을 안쉬고 달렸다는 핑계로 쉬는 시간이 많았다.
  • 책을 아예 안보고 있다. 조금이라도 전진하는 것과 멈추는 것은 다른 문제인데..

잘한 것

  • 그래도 오늘 하기로 계획한 알고리즘 문제는 모두 풀었다.

느낌

  • 완독하기로 한 책을 조금씩이라도 읽어야 발전하는데 아예 진행을 안하고 있다.
  • 진짜 고질적인 문제인데, 계획한 시간을 넘으면 잠시 멈추고 하기로 한 일을 진행해야 한다.
  • 걱정이 많이 된다. 쉴 땐 쉬고 할 땐 하는 연습이 필요하다.

할 일

  • 코드스쿼드 미션하기
  • 프로그래머스 문제 풀기
  • TCP/IP 쉽게 더쉽게 읽기