Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- Transform
- 풀이
- 지역변수
- 138477
- 한빛미디어
- CPU 스케줄링
- DirectX
- 프로그래머스
- 인터럽트
- static
- 보조기억장치
- 스레드
- 장치컨트롤러
- 렌더링 파이프라인
- 독학
- 운영체제
- 멀티스레드
- 컴퓨터구조
- 컴퓨터 구조
- 코딩테스트
- 혼자 공부하는
- 프로세스
- BFS
- DDR SDRAM
- C++
- dfs
- 131701
- 입출력장치
- 그래프
- 혼자공부하는
Archives
- Today
- Total
빼미의 개발일기
[프로그래머스][Lv.1] - 명예의 전당(1) 본문
● 소감
- 자료구조를 알면 확실히 도움이 된다.
● 나의 풀이
더보기
1) 문제 이해
- 점수는 score의 길이 만큼 제시되고, 차례차례 정렬이 이뤄지지만, k만큼의 갯수만 유지된다.
- 그럼 추가가 될 때 k 갯수를 유지하기 위한 조건만 찾으면 되고, 매 차례 정렬이 이뤄져야 하기 때문에 삽입하면 알아서 정렬을 해주는 set을 사용해야겠다고 생각했다.
- 한번 틀리고 깨달았지만 동일한 값이 또 제시될 수 있기 때문에 multiSet을 최종적으로 사용했다.
2) 조건 찾기
- 우선 사용할 multiSet을 만들고 score를 순차적으로 접근한다. 접근한 score은 차례대로 multiSet에 들어가게 되겠지만 k 개를 유지해야 하기 때문에 multiSet.size()와 k를 비교해준다.
- multiSet.size()가 k를 넘게 됐다면 Set의 front와 back (deque가 아니기 때문에 이렇게 접근할 순 없지만 이해를 위해) 중 어떤걸 지울지를 봐야하는데, 접근한 score가 Set의 front보다 컸다면 front가 밀릴테니 front를 제거, 그 반대라면 back을 제거 하는 식으로 처리했다.
if(multiSet.size() > k)
{
if (*(multiSet.begin()) <= score[i])
multiSet.erase(multiSet.begin());
else
multiSet.erase(multiSet.end());
}
● 내가 작성한 답
더보기
vector<int> solution(int k, vector<int> score)
{
vector<int> answer;
multiset<int> scoreSet;
for(int i = 0; i < score.size(); i++)
{
scoreSet.insert(score[i]);
if(scoreSet.size() > k)
{
if (*(scoreSet.begin()) <= score[i])
scoreSet.erase(scoreSet.begin());
else
scoreSet.erase(scoreSet.end());
}
answer.push_back(*(scoreSet.begin()));
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Lv.1] - 카드 뭉치 (0) | 2024.01.02 |
---|---|
[프로그래머스][Lv.2] - 연속 부분 수열 합의 개수 (1) | 2023.12.30 |
[프로그래머스][Lv.1] - 추억 점수 (0) | 2023.12.30 |
[프로그래머스][Lv.2] - 멀리뛰기 (1) | 2023.12.30 |
[프로그래머스][Lv.1] - 콜라 문제 (0) | 2023.12.29 |
Comments