Skip to content

Conversation

@LeeSongMi
Copy link
Collaborator

@LeeSongMi LeeSongMi commented Apr 24, 2025

#4

[W2] 정렬: 회의실 배정

🔍 시도 방식

1차 시도

  • 시작 시간과 끝나는 시간에 대한 제한을 보지 못하고 진행
  • 0시부터 24시까지일거라고 생각하고 배열 제작
    • 시작시간과 종료시간의 사이 시간을 대비해서(예: 0시,0시30분,2시...24시) 총 크기 49의 배열로 제작
    • 값은 0으로 초기화, 예약완료시 1로 표기
  • 진행시간으로 1차 정렬, 시작시간으로 2차 정렬 진행
  • 배열 속 시간이 0이라 예약 가능한 경우, 카운팅하고 1로값을 변경

[문제점]

  • 문제에서 시작 시간/종료 시간과 관련된 수치를 제공했으나 이를 인지하지 못하고 진행해 시작부터 잘못 풀게됨
  • 문제 해결 방법에 대해 스스로 정리를 하지않고 진행하다보니 결과물을 내기까지 시간이 오래걸리고, 푸는 과정에서 함정에 빠져도 빠진 줄 모른채 시간을 소모하는 일이 많았음

📖 미팅 후 풀이 방식

  • 기본적인 풀이 방식은 미팅을 진행하며 학습
  • 사용방식: 정렬, 그리디(->다음번에는 문제에서 그리디라는 정보를 습득할 수 있도록 제공하는 정보를 유의해서 보자)

진행 로직

  1. 1순위:종료시간, 2순위:시작시간으로 회의실 예약 신청 데이터를 우선적으로 정렬
  2. 예약 확정된 타임은 예약 배열에 넣어서 관리
  3. 가장 마지막에 예약된 시간보다 예약 신청하려는 시간이 더 늦을 경우 해당 예약을 확정처리(배열에 넣음)
  4. 예약신청리스트를 다 돌고 난뒤 예약 확정 내역의 개수를 반환

⭐️ 코드의 포인트!

  • 위치: 17번줄, 입력받은 값을 리스트로 만들어 정렬을 진행
  • 리스트 컴프리헨션을 이용해 입력받은 데이터를 변수화하고 바로 정렬까지 진행
  • 고민1: 코드를 1줄로 줄였으나, 줄이는데 치중한 나머지 가독성을 떨어트린것은 아닌지에 대한 고민
    • 배열 생성과 정렬은 따로 분리하는게 더 좋았을지?

💡발전을 위한 시도

  1. 미팅을 진행하며, 기본적인 풀이 방식을 들었어도 직접 풀이 과정을 적고 코드 작성을 진행
    1. 문제 풀이를 실패했을 때, 원인이 무엇인지 직관적으로 이해할 수 있었고, 바로 수정이 가능했음
  2. 불필요한 코드를 줄이기 위해서, 필요없는 정보가 있는지 살펴보는 과정을 추가
    1. 확정된 회의수를 카운팅하는 count 변수와, 마지막 시간을 기록하는 end함수가 있었으나 예약목록배열 하나를 이용하는 방식으로 변경
  3. 단순 for문 사용을 지양하고, 리스트 컴프리헨션, 람다 같이 익숙하지 않더라도 코드 간소화에 도움이 되는 것들을 사용하기위해 고민

[W2] 이진탐색: K번째 수

🔍 시도 방식

1차 시도

  • B배열을 생성
  • sorted를 이용해 정렬 후 해당 인덱스의 값 추출

[결과]
메모리 초과로 실패

2차 시도

  • 행렬의 형태를 가정함
  • 찾으려는 인덱스 값을 기준으로 배열을 절반씩 잘라내며 범위를 축소해나감
  • 반복하며 인덱스가 있는 행이 추려졌을때, 해당 행의 인덱스 값을 추출

[결과]
행렬의 데이터는 정렬되지 않은 데이터이기 때문에,
정렬되기 이전의 인덱스 값을 추출하는 결과가 발생하며 실패

🚧 해당 문제의 어려운 점

  1. 정렬보다는 범위를 축소하는게 핵심인 것으로 보임
  2. 범위 축소를 위한 기준을 세워야하는데, 정렬된 상태의 중앙값을 찾을 수 없음
  3. 중앙값을 기준으로 큰수/작은수를 나누려고 했으나, 정렬된 이후의 중앙값을 찾을 수 없어 막힌 상황
  4. 이진탐색은 정렬된 상황을 기준으로 생각했는데, 숫자의 범위가 커서 정렬조차 어려운 상황에서 범위를 축소하는 부분에서 막힘

@LeeSongMi LeeSongMi changed the title feat: [정렬] 회의실 배정 [W2] 회의실 배정 Apr 24, 2025
@dev-hjJoo dev-hjJoo assigned dev-hjJoo and LeeSongMi and unassigned dev-hjJoo Apr 25, 2025
@dev-hjJoo dev-hjJoo self-requested a review April 25, 2025 08:55
@dev-hjJoo dev-hjJoo added the enhancement New feature or request label Apr 26, 2025
Copy link
Owner

@dev-hjJoo dev-hjJoo left a comment

Choose a reason for hiding this comment

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

지난 번에 미팅 때에 비해 파이썬에 많이 익숙해진 것 같아요!
슬라이싱이나 리스트 컴프리헨션 등 파이썬 문법들을 잘 활용하고 계신 것 같습니다. 👍
코드 보면서 궁금했던 부분들 코멘트 남겨두었습니다! 확인 부탁드립니다~!

그리고 브랜치 머지 하시기 전에 디렉토리 처리 잊지 말고 부탁드립니다~!
수고 많으셨습니다!!

Copy link
Owner

Choose a reason for hiding this comment

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

ㅋㅋ

Comment on lines +4 to +9
Copy link
Owner

Choose a reason for hiding this comment

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

  1. 2차원 배열 내부에 값이 순서대로 정렬되어 있는 게 아니기 때문에 이 배열을 단순히 인덱스를 기준으로 자르는 건 의미가 없을 것 같습니다.
  2. 만약 정렬된 상태를 가정한다면 인덱스로도 접근할 수 있을 것 같습니다.
image

Copy link
Owner

Choose a reason for hiding this comment

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

혹시 이 코드는 어떤 역할을 하는 지 알 수 있을까요?
divmod는 나눈 몫과 나머지를 반환해주는 함수로 알고 있는데, 이 두 값을 더한 값을 인덱스로 쓰는 이유가 있나요?

Copy link
Owner

Choose a reason for hiding this comment

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

이건 디버깅 코드인가요? 아니면 아직 이 코드가 통과가 안 된 상태인가요?

Comment on lines +19 to +21
Copy link
Owner

Choose a reason for hiding this comment

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

스터디 때 제 코드 설명드리면서 언급했던 아이디어인데, 가장 늦은 종료 시간을 변수에 담아 업데이트 하는 방식은 어떠신가요?
지금 코드에서 reservation 리스트에 time 값을 append 해주고 있지만 활용하는 값은 마지막에 추가된 종료시간(reservation[-1][1])만을 고려하고 있는 것으로 보여서요.

재사용되지 않는 데이터라 메모리 측면에서 비효율적인 것 같습니다. 한 번 고려해주시면 감사하겠습니다!

@dev-hjJoo dev-hjJoo moved this to In Progress in Algorithm Warm-Up May 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

2 participants