티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/77486

 

코딩테스트 연습 - 다단계 칫솔 판매

민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,

programmers.co.kr

 

기록해 놓고싶은점: 

처음에 이름, 부모의 포인터를 갖는 구조체를 선언하고 벡터에 넣으면서 부모의 포인터로 연결했는데 

자꾸 이상한 값이 출력됐다.

이건 아마도 벡터에 값을 넣다가 벡터가 초기에 할당한 메모리를 넘어서서 재할당하면서 주소값이 변경되면서 생긴 문제인것 같다.

벡터에 모든 사람을 먼저 푸쉬해놓고 그 이후에 다시 반복문을 돌면서 부모의 주소값을 할당해줬더니 정상적으로 출력.

(그런데 결국 풀다보니 이 문제에서 벡터는 필요없었다)

 

1. 해당하는 인원의 이름, 벌어들인 돈, 부모의 포인터를 갖는 구조체를 갖는 Tree 구조체를 선언한다.

2. unordered_map<string, Tree>를 선언하고, enroll 벡터를 돌면서 할당한다.

 

  • enroll 에 등장하는 이름은 조직에 참여한 순서에 따릅니다.
  • 즉, 어느 판매원의 이름이 enroll 의 i 번째에 등장한다면, 이 판매원을 조직에 참여시킨 사람의 이름, 즉 referral 의 i 번째 원소는 이미 배열 enroll 의 j 번째 (j < i) 에 등장했음이 보장됩니다.

 

위 조건에 의해 enroll[i]의 부모는 이미 unordered_map에 할당이 됐음이 보장된다.

 

3. seller 벡터를 돌면서 번돈을 재귀적으로 계산한다.

   부모가 없는 인원을 만나면 리턴.

   또한 넘겨 받은 돈이 0원 이여도 리턴한다. (안할시 시간초과) 

 

 

다른 분들 코드를 봤는데 생각해보니 딱히 복잡하게 구조체를 쓸필요는 없었다.

그냥 트리 그림이 보여서 그쪽으로 생각이 쏠린듯.

'PS' 카테고리의 다른 글

백준 1991. 트리 순회  (0) 2022.01.23
프로그래머스. 외벽점검  (0) 2022.01.21
프로그래머스. n^2 배열 자르기  (0) 2022.01.20
프로그래머스. 정수 삼각형  (0) 2022.01.18
프로그래머스. 2xn 타일링  (0) 2022.01.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함