문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr PCCP가 뭔진 모르겠는데, 갑자기 이와 관련된 기출문제가 많이 뜨더라. 그래서 하나 풀어봤다. 문제 이해 자체는 간단하고, 범위도 그렇게 넓지 않아서 쉽게 풀릴 줄 알았다. 근데 시간초과가 떠서 좀 애먹었다. 문제 핵심 및 풀이 석유 그룹화 해당 문제의 핵심은 상하좌우로 연결되어 있는 석유를 하나의 덩어리로 보는 것이다. 이는 land [][]의 값이 1인 곳부터 시작하여, 상화좌우..
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/87391?language=java 오랜만에 풀어본 프로그래머스 Level 3 문제. 1시간 제한시간을 두고 풀었는데, 로직만 생각하다가 결국에 실패했다. 끝나고도 천천히 고민해 봤지만 마땅히 답이 떠오르지 않아, 여러 정보를 참고해 봤다. 개인적으로 이 문제는 수학적인 센스를 요구하는 문제인 것 같다. 어떻게 이런 생각을 하지.. 문제 핵심 및 풀이 문제 제한 사항 잘 파악하기 문제만 읽어보면 단순한 BFS 혹은 완전 탐색 시뮬레이션이라고 생각하기 쉽다. 하지만 제한사항을 보면 절대 그렇지 않은 것을 확인할 수 있다. n과 m의 범위, 그러니까 행과 열의 개수가 모두 10^9까지 가능하다...
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/86052 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 정답률이 왜 이렇게 낮나 했더니, 문제 이해하기가 난해했다. 진짜 친구랑 둘이서 푸는데, 문제 해석으로 토론할 줄은 몰랐지.. 솔직히 깔끔한 문제는 아니었다고 생각했다. 문제 핵심 및 풀이 '빛의 경로 사이클'에 대한 정의 이 문제의 핵심이자 가장 애매했던 부분이다. 문제에서는 빛의 경로 사이클을 "빛이 이동하는 순환 경로를 의미"한다고 정의했다. 진짜 딱 이 한 문장이라 나머지는 예제..
Git repository https://github.com/howudong/java-christmas-6-howudong 4주 차 후기 4주 차는 지금까지 했던 어떤 미션과는 요구사항이 복잡했다. 그리고 요구사항을 과제식으로 설명한 것이 아니라, 클라이언트가 기능을 요청하는 방식을 사용했다. 그러다 보니 뭔가 미션을 위한 문제라기보다는 실제 서비스 개발이라는 느낌이 강했다. 이번에는 내가 실무자라는 느낌으로 미션에 임했다. 클라이언트에게 프로그램을 전달하고, 협업을 위해 할 수 있는 설계를 하기 위해 노력했다. 또한 기능이 실제로 확장될 수 있고 프로그램이 유지보수가 된다는 점을 생각했다. 도메인 설계 다이어그램 이번 주차의 핵심이라고 할 수 있는 도메인의 다이어그램이다. 값 객체(Value Objec..
repository https://github.com/howudong/java-lotto-6/tree/howudong 3주 차 소감 요구사항이 복잡해지기 시작한 것 같다. 확실히 1~2주 차는 맛보기였다.. 이번 주차에는 입력과 출력에 필요한 도메인 정보들이 다르다. 그래서 처음으로 DTO를 적용시켜 봤다. DTO라는 개념 자체는 간단하지만 이를 직접 사용한다는 것은 간단하지 않았다. 'DTO로 어디서 바꿔줘야 하는가?', '이를 효율적으로 사용하기 위해선 어떻게 해야 하는가?' 이런 것들을 고려하는 데에 개인의 주관이 많이 들어갔다. DTO로 변환시켜 주기 위한 service 계층을 사용하다 보니, 자연스럽게 프로그램 규모가 커지고 복잡해지기 시작했다. 이럴 때일수록 중요한 것이 객체지향적인 설계라고 ..
https://github.com/woowacourse-precourse/java-racingcar-6/pull/149 2주 차를 마치고 느낀 점 구현 난이도는 1주 차보다 높진 않았던 것 같다. 오히려 1주 차보다 낮은 느낌을 받았다. 그런데 객체지향적 설계 같은 여러 가지 조건을 고려하다 보면, 이 미션 생각보다 까다롭다. TDD를 처음으로 적용해 봤는데, 확실히 좋더라. 클래스의 역할 분리가 명확하게 되고, 더욱 견고하게 만들어지는 느낌이다. 무엇보다도 오류가 훨씬 적어져서, 오류 색출에 걸리는 시간이 대폭 줄어들었다. 순조롭게 진행을 하다가, 마지막 날에 큰 리팩토링을 해버리는 바람에 애를 먹었다. 코드를 고치는 건 괜찮은데, 테스트 코드를 옮기고 하는 게 진짜 괴롭더라... 오히려 괴로워하다 보..
Java에서 Map을 사용하다 보면 로직을 처리하는데 함수 호출이 잦아지는 경우가 많아 코드를 한눈에 알아보기가 힘들다. 그래서 Map interface 중 Map 사용을 간결하게 하도록 돕는 함수에 대해 알아봤다. 이번 포스팅에서 소개할 메서드는 compute() computeIfAbsent() vs putIfAbsent() computeIfPresent() 이다. 소개도 나와있는 순서대로 하겠다. compute 동작 compute(K key, BiFunction
Repository 주소 https://github.com/howudong/java-baseball-6/tree/howudong GitHub - howudong/java-baseball-6 Contribute to howudong/java-baseball-6 development by creating an account on GitHub. github.com 다이어그램 domain 다이어그램 설계 domain과 view의 연관관계 다이어그램 domain과 view과 서로 연관관계없이 잘 만들어진 모습을 확인할 수 있다. 컨트롤러만 빼고 보면 서로 모르게 잘 만들진 것 같은데.. 컨트롤러를 포함해서 생각해야 하나? 컨트롤러를 포함하면 그림이 좀 복잡해져서 연관관계를 파악하기 어려워진다. 일단 내가 할 수 ..