프로그래머스/위클리 챌린지/입실 퇴실
글 작성자: Doublsb
https://programmers.co.kr/learn/courses/30/lessons/86048
풀이
- 입실, 퇴실 순서 배열이 주어진다
- 입실과 퇴실의 시간은 기록되어 있지 않으며, 입실/퇴실이 동시에 이뤄지는 경우는 없다
- 각 사람 별로 반드시 만난 사람 수를 반환해야 한다
- 규칙 찾느라 좀 헤맸는데, 아래와 같이 풀었다.
C#
using System;
using System.Linq;
using System.Collections.Generic;
public class Solution {
public int[] solution(int[] enter, int[] leave) {
var interSect = new List<int>();
var answerHash = new Dictionary<int, HashSet<int>>();
var answer = new int[enter.Length];
for(int i=0; i<leave.Length; i++)
{
int index_in = Array.IndexOf(enter, leave[i]);
int take_count = index_in;
int takeLast_count = leave.Length - i - 1;
if(take_count <= 0 || takeLast_count <= 0) continue;
interSect
= enter.Take(take_count)
.Intersect(leave.TakeLast(takeLast_count)).ToList();
interSect.Add(leave[i]);
foreach(var inter in interSect)
{
if(!answerHash.ContainsKey(inter-1))
answerHash.Add(inter-1, new HashSet<int>());
foreach(var node in interSect)
{
if(inter == node) continue;
answerHash[inter-1].Add(node);
}
}
enter[index_in] = 0;
}
foreach(var e in answerHash) answer[e.Key] += e.Value.Count;
return answer;
}
}
결과
100.0 / 100.0
피드백
효율성을 덜 갖다버릴 수 있는 방법을 모르겠군. 음...
반응형
'프로그래밍 > 알고리즘' 카테고리의 다른 글
LeetCode 23.08.16 : Sliding Window Maximum (0) | 2023.08.17 |
---|---|
프로그래머스/위클리 챌린지/최소직사각형 (0) | 2021.09.27 |
프로그래머스/위클리 챌린지/복서 정렬하기 (0) | 2021.09.06 |
프로그래머스/위클리 챌린지/모음 사전 (0) | 2021.08.31 |
프로그래머스/위클리 챌린지/직업군 추천하기 (0) | 2021.08.24 |
댓글
이 글 공유하기
다른 글
-
LeetCode 23.08.16 : Sliding Window Maximum
LeetCode 23.08.16 : Sliding Window Maximum
2023.08.17 -
프로그래머스/위클리 챌린지/최소직사각형
프로그래머스/위클리 챌린지/최소직사각형
2021.09.27 -
프로그래머스/위클리 챌린지/복서 정렬하기
프로그래머스/위클리 챌린지/복서 정렬하기
2021.09.06 -
프로그래머스/위클리 챌린지/모음 사전
프로그래머스/위클리 챌린지/모음 사전
2021.08.31