[그리디] 김민욱 사다리 미션 1~5 단계 제출합니다#95
Open
hapdaypy wants to merge 28 commits intonext-step:hapdaypyfrom
Open
Conversation
… 간격으로 정렬하여 출력하는 printNames, printRewards 로직 추가.
…Code 메서드 오버라이딩 추가.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
😄 소개
안녕하세요, 이진님! 그리디 백엔드 4기 김민욱입니다.
바쁘신 와중에 시간 내서 리뷰해주셔서 감사합니다!
이번엔 정말 뜨겁게 리팩토링을 해보도록 하겠습니다 !!
🚗 해당 코드의 단계적인 흐름 설명
참여자 이름 입력
실행 결과 입력
데이터 매칭 검증
사다리 높이 입력
결과 확인 대상 입력
💭 고민한 내용
1. 자료 구조의 선택: 2차원 배열 vs 일급 컬렉션
고민 과정 : 처음에는 사다리를 2x2 배열로 진행해야 하는지 고민이 많았습니다.
해결 방법 : 하지만 결국 객체를 포장하는 일급 컬렉션으로 진행해야 한다는 것을 깨달았습니다! 일급 컬렉션 내부의 객체 배열에 true, false 값을 집어넣고, 출력을 할 때 문제 형식에 맞게 문자열로 변환하여 출력하는 방식으로 해결했습니다.
2. 좌표 매핑 및 이동 검증 원리 (Line.move)
구현은 했지만 어떻게 대상에 사다리를 이동시켜서 값을 구할 수 있을까? 라는 고민을 했습니다 !
해결 방법은 다음과 같습니다 !
해결 방법 :
예를 들어 사람이 4명일 경우 세로 기둥의 Position 인덱스는 0, 1, 2, 3 으로 구성됩니다. 가로 한 줄에 도달했을 때, 현재 기둥의 인덱스를 기준으로 좌우 간격의 불리언 값을 검증하여 이동할 위치를 찾습니다!
왼쪽 다리 검증 (canMoveLeft) : 반환 값이 true 라면, 현재 위치 - 1 이 됩니다!
오른쪽 다리 검증 (canMoveRight) : 반환 값이 true 라면, 현재 위치 + 1 이 됩니다!
그대로 하강 : 양쪽 간격이 모두 false 라면 연결된 다리가 없으므로, 위치 값을 변경하지 않고 그대로 반환합니다.
4. Position 의 원시값 포장
로또 미션과 다르게 이번엔 숫자들을 하나씩 포장하여 원시값을 포장했습니다. 때문에 +1 이나 -1 같은 단순 산술 연산 로직을 외부에 노출하지 않고, moveLeft(), moveRight() 라는 명확한 도메인 행위로 객체 내부에 응집시킬 수 있었습니다.
5. 사다리 게임 분석과 방어 로직
사다리 게임에서의 규칙상 |-----|-----| 처럼 나란히 사다리가 생기는 것을 방지해야 하고, 바로 밑에 사다리가 생기는 것도 방지해야 했습니다.
고민했던 사항 : 처음에는 현재 층을 기준으로 아래층도 방어해야 하는지 의문이 들었습니다.
하지만 위에 층만 방어 로직을 구현한다면 나머지는 자동으로 아래층에도 중복으로 생기는 일이 없다는 것 을 깨달았습니다! 이를 바탕으로 determineNext 메서드에서 이전 상태 값들을 확인하여, 가로와 세로 모두 사다리가 겹치는 현상을 깔끔하게 방어할 수 있었습니다.
❓ 질문 사항
코드를 리팩토링함에 따라 궁금한 사항이 많이 생길 것 같습니다.
이번엔 사다리 미션 구현에 많은 시간을 투자하지 못한 만큼 리팩토링에 더 신경 써보도록 하겠습니다!!