링크

7주차

  • 아직 이름도 없음;;
  • 이름을 지어준다면 회의실 접촉인원 찾기

난이도

  • 프로그래머스 난이도 2
    • 문제 형태를 바꾸면 쉬워진다.

문제요약

  • 입장순서, 퇴장순서가 따로 적힌 배열이 있을때 각 인원이 반드시 만나는 인원 수 반환

접근

    1. 입장배열, 퇴장배열을 따로본다.
      • 머리가 아프다
    1. 입장 배열과 퇴장배열을 하나의 배열로 통합
      • 좀더 계산이 쉬워졌다.
      • 하나의 배열로 합치면 입장과 퇴장접근이 더 쉬워진다.
      • 인원이 들어갈때 현재 방의 인원수가 그사람이 보는 사람이되고, 퇴장하기전까지 들어오는 사람을 +1해주면된다.

간단 알고리즘

  • 배열 합치기
    • save는 합친 결과 저장용
    • 퇴장인원을 기준으로 반복시작
      • 퇴장인원 l
      • 퇴장인원이 save에 없을때
        • 입장인원 한명씩 save에 추가
      • 퇴장인원이 save에 존재
        • 퇴장인원 save에 추가
        • >>>다음 퇴장인원 확인 시작
  • 각 인원별로 확인 알고리즘
    • save를 순서대로 확인
    • cur는 현장에 있는 인원수
      • 입장하면+1, 퇴장하면-1이된다.
    • check
      • dict자료구조, key는 인원아이디, value는 그 인원이 본 인원수
    • 반복시작
      • check에 없을때 = 이제 입장하려는 사람
        • check에 인원아이디:cur을 초기화해준다.
        • 모든 check의 본인원수를+1해준다.
        • cur+1해준다.
      • check에 있다 = 이제 퇴장
        • check에서 해당인원 key 삭제
        • cur-1해준다.
  • 결과
    • check의 Key를 기준으로 정렬, value를 answer해준다.

후기

  • 두개의 배열로 열심히 해보려했지만 조금 복잡해져서 머리가 잘 안돌아갔다.
  • 두개의 배열로 한번에 풀수 있지만, 좀더 쉽게 접근하기위해 하나의 배열로 만든뒤 진행했다.
  • 지금 알고리즘은 두개의 영역으로 있지만 하나로 합칠 수 있는 여지는 충분하다.
  • 하지만 어느정도 시간을 타협하기위해서는 하나의 접근을 고집하기보다 좀더 자신이 빠르게 생각할 수 있게 변형하는것도 중요하다 생각한다.