Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[LBP] 박세은 사다리 1단계 제출합니다. #36

Open
wants to merge 5 commits into
base: seun0123
Choose a base branch
from

Conversation

seun0123
Copy link

@seun0123 seun0123 commented Mar 7, 2025

리뷰어 : 김우진
페어 : 윤준석, 정상화


전체 구조

클래스명 책임
Ladder 사다리 전체 구조 관리
Lines Line의 일급 컬렉션
Line 가로줄(Bridge)의 유무 관리
LadderGenerator 전체 사다리 생성 로직 관리
LineGenerator 각 줄(Line) 반복 생성 및 관리
SingleLineGenerator 개별 줄(Line) 생성 로직
ReservedPositionGenerator 미리 반드시 채워야 할 위치를 예약하는 로직
LadderValidator 세로 방향에 대한 사다리의 유효성 검증 및 보장
LineView View 관련 로직

사다리 타기 생성 기준 

  1. 가로(Bridge) 생성 기준
    • 한 라인에 최소 한 개의 가로줄은 반드시 존재한다. -> 빈줄 금지
    • 연속된 위치에 가로줄을 생성하지 않는다. -> |-----|-----| 형태 금지
    • 이전 줄과 같은 위치에 가로줄을 생성하지 않는다. -> 세로로 같은 위치 반복 금지
  2. 세로(Column) 연결 기준
    • 모든 세로줄은 최소 하나의 가로줄로 연결된다.
      • 빈 세로줄 금지
      • 모든 출발 지점이 반드시 목적지까지 도착 보장
  3. 미리 예약된 위치
    • 각 column은 예약을 통해 반드시 한 번은 가로줄을 가진다. -> 모든 세로줄 연결 보장

사다리 타기 생성 기준 관련 메서드

생성 기준 관련 메서드
한 라인에 최소 한 개의 가로줄은 반드시 존재한다. SingleLineGenerator.ensureOneBridge()
이전 줄과 같은 위치에 가로줄을 생성하지 않는다. SingleLineGenerator.isNotOverlap()
SingleLineGenerator.canConnectedBridge()
모든 세로줄은 최소 하나의 가로줄로 연결된다. LadderValidator.validate()
LadderValidator.validateColumn()
LadderValidator.connected()
LadderValidator.connect()
각 열(Column)은 사전 예약을 통해 반드시 한 번은 가로줄을 가진다. ReservedPositionGenerator.generate()
ReservedPositionGenerator.reserveRandomPosition()
예약된 위치 이외의 가로줄 생성은 랜덤으로 이루어진다. SingleLineGenerator.generate()
SingleLineGenerator.generatePoint()

질문

  1. 앞서 설정한 기준을 적용하여 세로와 가로에 빈 줄이 없도록 하고, 연속된 가로줄이 생성되지 않도록 구현했습니다.
    그러나 100번 실행 중 약 2-3회(2-3%) 정도의 확률로 연속된 가로줄이 발생하는 상황입니다.
    현재 코드에서 놓친 부분이 있다면 피드백 부탁드리겠습니다!

  2. 문제를 발생할 때마다 조건을 추가하는 방식으로 구현하다보니 코드가 상당히 복잡해졌다고 느껴집니다.
    중복된 조건이 있거나 불필요하게 복잡한 방식으로 구현한 부분, 혹은 더 간결하게 표현할 수 있는 부분이 있다면 피드백 부탁드리겠습니다!

  3. 그 외에도 요구사항을 충족하지 못한 부분이나 코드 컨벤션과 관련하여 개선이 필요한 점이 있다면 피드백 부탁드리겠습니다. 😊

Copy link

@woogym woogym left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사다리 1단계 미션 수고하셨어요 세은😁😁

사다리 미션이 많이 어려웠던 것 같아요ㅠㅠ
저도 처음에 정말 많이 고생했던 기억이 있어요

  1. 100번 실행중 약 2-3회 연속된 가로줄이 발생하는 상황은 제가 명시적으로 코드를 보고 바로 파악하기 어려운 문제인 것 같아요, 전반적인 코드의 구조를 피드백을 통해서 수정하면 아마 깊게 숨어있는 정답을 찾기 쉬울거라고 생각해요
  2. 코멘트에 남겨두었으니 확인해보시면 좋을 것 같아요
  3. 요구사항에 대한 부분은 코멘트에 남겨두었어요

사다리 1단계 미션 고생 많이하셨어요
아마 많은 리팩토링에는 많은 시간이 소요될 것 같아요 🥲
힘들겠지만 마지막까지 집중 놓치지 않고 완주했으면 좋겠어요! 🔥🔥

@seun0123
Copy link
Author

늦게 리팩토링을 완료하게 되어 죄송합니다. 🙇🙇
처음 접하는 개념과 함수형 프로그래밍을 적용하는 과정에서 출력 결과가 계속 달라져 완성하는데 꽤 오랜 시간이 걸렸습니다.
하지만, 방어적 복사, 일급 컬렉션의 책임, 함수형 프로그래밍의 특징에 대해 깊이 찾아보고 적용 해볼 수 있는 기회가 되어 매우 의미있었습니다!
아직은 의식하지 못하고 수정해야 할 부분이 많다고 생각합니다,, 부족한 점이 있으면 언제든지 말씀해 주세요!

@seun0123 seun0123 requested a review from woogym March 11, 2025 15:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants