Skip to content

Conversation

bus710
Copy link
Contributor

@bus710 bus710 commented Mar 3, 2025

답안 제출 문제

체크 리스트

  • 우측 메뉴에서 PR을 Projects에 추가해주세요.
  • Projects의 오른쪽 버튼(▼)을 눌러 확장한 뒤, Week를 현재 주차로 설정해주세요.
  • 바로 앞에 PR을 열어주신 분을 코드 검토자로 지정해주세요.
  • 문제를 모두 푸시면 프로젝트에서 StatusIn Review로 설정해주세요.
  • 코드 검토자 1분 이상으로부터 승인을 받으셨다면 PR을 병합해주세요.

@bus710
Copy link
Contributor Author

bus710 commented Mar 3, 2025

풀이 1

어떻게 쉽게 중복된 시간을 검출 해낼지 고민하다가, 비트 연산을 사용하기로 했습니다.

  • 첫번째 미팅 시간이 0 부터 4까지라면 0번째 비트에서 4번째 비트까지 채워진 마스크를 만들고 (11111)
  • 두번째 미팅 시간이 1 부터 4까지라면 1번째 비트에서 4번째 비트까지 1로 채워진 마스크를 만듭니다 (11110)
  • 저 두 마스크를 AND 연산하면, 11110이기 때문에, 중복된 시간이 있음을 쉽게 알 수 있습니다.
  • 아마도.... 하루에 미팅이 하나 뿐인 사람은 없을 것이기 떄문에 저 AND 연산의 결과 값은 재사용을 위해 따로 저장해 둡니다.

테스트 케이스들에서 2진 값을 출력한다면 아래 스크린샷과 같을 것 입니다.
첫번째 테스트는 겁치는 부분이 있지만, 두번째와 세번째 테스트들은 겹치는 부분이 없음을 시각적으로 쉽게 알 수 있습니다.



다만, 비트 마스크를 만드는 연산 과정이 시간 복잡도를 크게 만들 수 있기 때문에, 조금 더 최적화하기 위해서는 루프의 스탭을 1로 할게 아니라 4나 8처럼 큰 수로 하되, 마지막 iteration에서 정확한 비트값을 채우는 식으로 접근할 수 있겠습니다.

공간 복잡도는, 주어진 미팅 수 만큼의 값을 가진 리스트(슬라이스)를 쓰기 떄문에, O(n)일 것 입니다. 주어진 값까지 고려한다면 O(2n)이겠죠?
시간 복잡도는, 주어진 리스트를 한차례 순회하는 것에 더해 마스크를 생성하면서도 루프를 돌기 때문에 O(n1+n2+n3...)이 될 것이라고 생각 합니다...만, 현실 세계에서 내내 겹치는 일정을 가지는 사람은 없을 것이기에(아침 9시부터 오후 6시까지인 미팅이 12개?), O(2n) 정도로 생각할 수 있지 않을까 싶습니다.


이 문제의 경우 유료인 관계로 성능이나 에지 케이스에 대한 검증이 안 되었습니다 (릿코드에 굳이 돈을 쓰지 않겠다는).

@bus710 bus710 requested a review from YeomChaeeun March 3, 2025 02:09
@bus710 bus710 moved this from Solving to In Review in 리트코드 스터디 3기 Mar 3, 2025
@bus710
Copy link
Contributor Author

bus710 commented Mar 3, 2025

아무래도 이번주에도 한문제만 풀게 될 것 같으니 아무때나 리뷰 부탁 드립니다.


import "testing"

func TestCanAttendMeetings(t *testing.T) {
Copy link
Contributor

Choose a reason for hiding this comment

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

오 테스트를 이렇게 작성하니 코드가 매우 간결하군요!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

그나저나, 다른 분들 풀이를 보니 훨씬 간단한 방법들이 있더라구요 ㅠㅠ

@TonyKim9401 TonyKim9401 merged commit 75778b8 into DaleStudy:main Mar 8, 2025
3 checks passed
@github-project-automation github-project-automation bot moved this from In Review to Completed in 리트코드 스터디 3기 Mar 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
No open projects
Status: Completed
Development

Successfully merging this pull request may close these issues.

3 participants