21년 2월 17일

한 일

  • java로 chess 게임 만들기

    • 코드리뷰를 받으면서 디테일한 부분이 나아지고 있다.

    • 체스말을 출력하기 위해서, 각 체스말을 대표하는 문자가 필요하다. - representation

      • 나는 Piece라는 추상클래스를 만들고 모든 체스말이 Piece를 상속받게 하였다.

      • 여기서 char getRepresentatio(Color color)라는 추상메소드를 만들어서, 상속받는 클래스가 오버라이드하게 한다.

      • Piece의 생성자 내부에서 this.representation = getRepresentation(this.color); 를 사용하여 오버라이드 한 로직에 따라

        representation을 세팅해주려고 했다.


      • 코드리뷰 과정에서 이러한 로직이 너무 번잡하다는 것을 깨닫게 되었다.

      • 검은말이냐 하얀말이냐에 따라 대문자, 소문자로 출력해야 하는데, 그냥 Piece의 representation getter에서 color에 따라

        대문자 또는 소문자를 출력하게 하면 된다.

      • Piece의 생성자는 representation값을 파라미터로 받아서 초기화 시켜준다.

      • 상속받은 체스말의 생성자에서 자신의 맞는 representation을 초기화 시켜주면된다. (왜 추상메소드가 필요하다고 생각했을까…)

        public Pawn(Color color){
        	super(color, Piece.PAWN_REPRESENTATION);
        }
        
  • 프로그래머스의 신규 아이디 추천, 메뉴 리뉴얼, 광고 삽입 문제를 풀었다.

    1. 신규 아이디 추천

      • 딱히 알고리즘이 없는 구현 문제이다.
      • java String을 잘 활용하여 주어진 요구사항에 맞게 차근차근 구현해주면 된다.
    2. 메뉴 리뉴얼

      • combination을 구현할 줄 알아야 하는 문제이다.

      • 자료구조로는 hashMap을 사용했다.

      • java는 permutation 함수가 따로 없어서 구현하는데 고생했다.

      • 나는 일단 재귀적 permutation을 구현하여 Combination을 구현했다.

        • 5C2를 예를 들면 [‘1’,’1’,’0’,’0’,’0’]이라는 배열을 선언한 후,
        • permutation으로 해당 배열을 섞어서 String으로 바꾼후(“11000”) HashSet에 배열을 저장한다.
        • 문자열에서 1에 해당하는 index는 뽑힌 것이고, 0에 해당하는 index는 안 뽑힌 것이다.
      • 매번 permutation을 돌려서 Combination을 위한 set을 구하는건 너무 낭비이기 때문에,

        List<String>[][] pickers 타입의 변수를 선언하여 Combination을 위한 목록을 저장했다.

        (예를들어 pickers[5][2] 는 5C2에 필요한 스트링 목록이다. “11000”,”10100”,”10010”….)

    3. 광고 삽입

      • 이건 완벽히 푼거같은데 테케 중 일부를 통과 못해서 자꾸 80.6점이 나온다 ㅠㅠ
      • 최대 플레이타임이 100시간이기 때문에 360000초라서 초단위로 전체순회해도 시간초과가 안나온다고 판단했다.
      • int[360000] 배열을 선언하여 을 시청기록의 시작시간에 +1 해주고, 끝시간에 -1해준다.
      • 또다른 int[360000] 배열을 선언하여 시작시간과 끝시간을 사용하여 해당 시간에 몇명이 시청중인지를 기록한다.
      • slicing window기법을 사용하여 360000번 선회하면서 adv_time동안 누적 시청시간이 최대값인 지점을 찾는다.

잘못한 것

  • 코드스쿼드 미션과 알고리즘 연습 이외의 개인공부를 안하고 있다.
  • 사실 내 잘못이다 ㅠㅠ 자꾸 중간에 쉬게되어서 집중을 온전히 못한다.

잘한 것

느낌

  • 코드리뷰를 받으면서 코드가 조금씩 개선되는 모습이 신기하다.
  • 인생 첫 코드리뷰 경험인데, 막 재밌고 신나지는 않지만, 배우고 성장하는 느낌이라 좋다.

할 일

  • 코드스쿼드 미션하기
  • 자바의 정석 읽기
  • 프로그래머스 문제 풀기