21년 2월 26일

한 일

  • 코드스쿼드 체스만들기 5단계 완성하여 pull request 보냈다.

    • 요구사항에 맞게 구현하였다.
    • 단순한 코드를 구현하려면 요구사항을 만족하는 “최소한의 클래스, 메소드, 중복을 없애는 것”이 중요하다.
    • 컨벤션 룰을 지키기 위해 노력하였다.
    • 체스말을 기본점수 순으로 정렬하기 위해, Piece(체스말) 클래스가 Comparable 인터페이스를 구현하도록 했다.
    • 풀 리퀘스트 주소
  • 프로그래머스 광고삽입 문제를 풀었다.

    1. 광고삽입:

      • 2월 17일에 풀려고 시도했다가 일부 테스트케이스가 틀려서 포기했던 문제이다.

      • 문제 특성상 디버깅도 힘들고, 어디서 틀렸는지도 확인을 못하겠다.

      • 다른 사람의 풀이를 참고하고, 문제를 정독하여 겨우 해결할 수 있었다.

      • 풀었던 기본 로직은 틀리지 않았는데, 디테일에서 틀렸다..

      • 배열 크기를 second로 바꾼 playTime으로 설정하고, 시청자들의 시작 시간과 종료 시간을 index로 하여 시청자의 증감을 기록한다.

        int[] startEndCount = new int[playTime+1]; //playTime은 second로 바꾼 시청시간
               
        logs를 순회하며:
        startEndCount[시작시간]++;
        startEndCount[종료시간]--;
        
      • startEndCount 배열을 가지고 index(시간)에 시청중인 사람이 몇명이었는지 기록하는 배열을 만든다.

        int[] viewerCount = new int[playTime+1];
        int viewer = 0;
        for(int i = 0; i <= playTime; i++){
          viewer += startEndCount[i];
          viewerCount[i] = viewer;
        }
        
      • slicing window기법을 이용하여 viewerCount 배열을 사용해서, adv_time동안 최대 누적 시청시간을 갖게하는 시간을 찾는다.

      • 로직은 다 똑같은데 틀린 이유는 문제를 자세히 읽지 않아서였다.

        • 누적 시청시간을 계산할 때, 종료시간은 포함되지 않는데 포함해서 계산했다 ㅠㅠ

        • 예를 들어, 321초부터 350초까지 시청했으면, 누적 시청시간은 29초이다.
        • 즉 viewerCount[321] 부터 viewerCount[349] 까지 더했어야 하는데, viewerCount[350]까지 더해서 틀린 것이었다.
      • 문제 꼼꼼히 읽어야 겠다. 정말 고생했다.

      • 나의 풀이 코드

잘못한 것

잘한 것

느낌

할 일

  • 인프런 스프링 기초 강의 듣기
  • 자바의 정석 읽기
  • 프로그래머스 문제 풀기