171021-TIL

Reading time ~1 minute

오늘 한일

  • 우아한형제들 코딩테스트를 볼 예정이였으나, 서버상의 문제로 다음 주로 연기 됐다.

  • 친구들을 만났다.

  • 백준의 백설공주 알고리즘 문제를 자바의 Stream을 이용해서 풀었다.

오늘 느낀점

  • 우아한형제들 코딩테스트를 볼 예정이였는데 codility 서버에 문제가 생겨서 시험을 못보게 됐다. 4시간짜리 시험이라 오늘 가장 큰 일정은 이거였는데 갑자기 취소되서 오늘 공부 의욕이 급 사라졌다. 주말이고 하니 오랜만에 친구들을 만나서 놀았다.

  • 백설공주 문제를 Stream만을 이용해서 만들어 본 코드다.

    public static void main(String[] args) {
      String peoples = "20\n7\n23\n19\n15\n10\n25\n8\n13";
      List<Integer> numbers = Arrays.asList(peoples.split("\n")).stream().map(Integer::parseInt).sorted().collect(Collectors.toList());
      solution(numbers);
    }
    public static void solution(List<Integer> numbers) {
      int fakerHeight = numbers.stream().mapToInt(Integer::intValue).sum() - 100;
      numbers.stream().filter(firstPeople -> !numbers.stream().filter(secondPeople -> firstPeople!= secondPeople).anyMatch(secondPeople -> firstPeople + secondPeople == fakerHeight)).forEach(System.out::println);
    }
    

    좀 익숙해졌다 싶었는데 생각보다 쉽지 않았다. 그래도 오늘 공부한 덕에 중간처리, 최종처리 개념과 filter(), forEach()는 좀 더 익숙해 진거 같다. 더 개선할 수도 있을거 같은데 현재로서는 이게 최종본이다.

  • 친구들을 보러가다 생각난건데, 왜 굳이 이렇게 복잡하게 하나 싶었는데, 그렇게 구현했을때의 몇가지 이점이 생각났다.

    public interface State
    public abstract class EndState implements State
    class Spare extends EndState  
    

    왜 굳이 이렇게 하나 싶었는데, 그렇게 구현했을때의 몇가지 이점이 생각났다.

    1. endState를 상속 받는 자식들한테 필요한 메소드를 미리 구현 해둘수 있다.

    2. 자식들한테 필요한 메소드를 새로 만들고 (예를 들면 getScore()같은)

      endState

      내가 이전에 여러 조건들로 점수를 획득 하던 부분을 이런식으로 구현 가능할 듯 싶다.

    남의 코드를 볼때 좋은점은(특히나 좋은 코드라면) 어떤 의도로 짰는지 생각해보는게 즐겁고, 생각의 폭까지 넓어진다.

내일 할일

  • 콘솔 볼링 게임 리팩토링

  • 프로그래머스 알고리즘 문제 풀기