티스토리 뷰
2019 섬머코딩 참여 후기
최근 섬머코딩에 참여해서 2문제를 겨우 풀고 마쳤습니다.. 앞의 문제는 쉬운문제였는데도 당황하고 머리가 쌔-하얘짐을 느꼈습니다. 너무너무 오래걸렸어요! 허무함도 느꼈구요. 살짝 내용이 달라지면 이렇게 멈칫하고 못풀게 되는구나... 제 실력에 매우 회의감이 들더군요.
A라는 알고리즘 문제를 한번 풀었다고 그 문제가 자신의 것이 될까요? 그 문제를 일주일뒤, 심지어 몇일 후에 보시면 다시금 전전긍긍하고 머리가 하얘지는경우가 많으실겁니다.
비슷한 유형 문제들에대해서도 거리낌없이 풀어낼 수 있을 정도는 되어야(자다깨서 갑자기 풀어도 뚝딱 풀정도의 수준은 되야..) 그 유형의 문제에 대한 숙련도가 어느정도 쌓였다고 볼 수 있지 않을까 싶습니다. (복습이 답인 듯 ㅠ.ㅡ..) 그런 제 생각을 이번 섬머코딩 참여로 더 느꼈네요. 좋은 경험이었습니다.
음.. 요즘도 매일매일 문제를 하나 둘 풀어가고, 그렇게 풀어낸 문제수는 늘어나지만, 그 성장세가 당장 크게 느껴지진 않습니다. 이전 문제들을 다시 풀어보면 긴가민가한경우가 절반은 될 겁니다. 이렇게 성장이 더디지만 한번 발을 내딛고 나니 욕심이 나네요. 대학시절에 이 재미를 좀 알아야 했는데. 하는 생각이 항상 들지만 이제 후회한들 뭐하겠습니까! ^~^;;
-
알고리즘문제, 라면공장 풀이
오늘은 라면공장 문제를 풀어봤네요. 프로그래머스 고득점 킷의 힙 문제 1,2번째 둘다 우선순위큐로 풀어낼 수 있었습니다. 넣은 값에 대해 오름차순정렬, 혹은 내림차순정렬을 알아서 시켜주는 우선순위 큐는 매우 유용합니다.
라면공장문제는 현재 밀가루재고(int stock), 추가밀가루공급가능일(vector<int> dates), 공급가능일 별 공급가능한 밀가루량(vector<int> supplies), 밀가루공급해야하는 일수(int k)를 참고해서 최소로 밀가루 공급을 받는 횟수를 결과로 출력하는 힙(Heap) 응용문제였습니다.
매일 밀가루는 1씩 감소합니다.(stock--;) 밀가루재고가 도중 부족해지는 경우는 없도록 입력값이 나옵니다.
이 문제의 핵심은 밀가루를 공급해야하는 총 일수, k기간동안 최대한 공급을 적게 받아야 하는 것입니다. 그러기 위해서
* 밀가루가 0개가 되기 전까지 최대한 가능한 추가밀가루공급기회를 저축해야합니다. * 밀가루가 0개가 되었을때 시점 기준 제일 효율적으로 밀가루를 공급 받을 수 있어야 합니다. |
예를들어 stock 10, dates [1,8,10], supplies [1,1,100], k=100의 상황이 있다고 가정합니다.
1, 8, 10일에는 각각 1, 1, 100개의 밀가루를 총 최대 3번 공급받을 수 있습니다. 그러나 이렇게 3번 공급을 받으면 굉장히 비효율적입니다. 차라리 밀가루 재고stock이 바닥나기 직전인 100일차에 100개의 밀가루 공급을 단 한번만 받고 끝낼 수도 있기 때문입니다.
-
우선순위 큐(priority_queue)의 사용
이 목표를 달성하기 위해서 우리는 우선순위 큐를 사용할 수 있습니다.
1) priority_queue<int, vector<int>, less<int>> queue; 를 선언합니다.
2) 공급가능한날에 도달하면 현재 공급가능한 밀가루량을 사용해서 queue.push(공급가능일이 되면 해당 공급가능일에 공급받을 수 있는 밀가루량); 해줍니다. (공급량, supplies[i] 사용 후, i++로 다음 공급가능한 날을 비교할 준비를 한다.)
우선순위큐, queue.top()은 현재 우선순위 큐 데이터의 최댓값을 나타내므로 stock(밀가루 재고량)이 바닥날시점에 현재시점에서 가장 많이 공급받을 수 있는 밀가루의 양을 판단할 수 있게 됩니다. stock 밀가루 재고량이 바닥날때, queue.top()를 활용하여 재고량을 채우고, 사용한 queue Data는 pop(); 시킵니다.
그렇게 되면 힙문제, 라면공장에서 요구하는 최소 밀가루 추가공급횟수를 알 수 있습니다. 오늘은 이렇게 프로그래머스의 힙문제 풀이도 두서없이 정리해보고 섬머코딩 후기까지 남겨봤습니다.
음.. 결론은 좀더 분발해야겠습니다. 개발관련분야에 발을 들인 이상, 꼭 고수가 되고싶네요. 화이팅!
'알고리즘 정보 > C++ 알고리즘' 카테고리의 다른 글
알고리즘 백준, 프로그래머스 문제풀며 실력 상승 중 (0) | 2019.05.22 |
---|---|
우선순위큐 MaxHeap 프린터 힙 알고리즘문제 풀이 (0) | 2019.05.16 |
프로그래머스 알고리즘 스택/큐 코딩문제풀이 정복 중 (0) | 2019.05.07 |
프로그래머스 탐욕법 알고리즘, 체육복 문제풀이 (2) | 2019.05.06 |
프로그래머스 알고리즘문제 1단계 전부해결, 2단계 도전! (0) | 2019.05.02 |
- Total
- Today
- Yesterday
- 프로토콜
- swift언어
- swift 기초
- swift 문자열
- createML
- swift string
- swift reduce
- swift문제
- swift
- swift알고리즘
- 김프매매
- CoreML
- SwiftUI
- Protocol
- 개발자문서
- 알고리즘문제
- 자연어처리
- ios
- uikit
- Swift 알고리즘
- 프로그래머스
- 스위프트
- Collection
- 백준알고리즘
- 부스트코스
- publisher
- 컬렉션
- 백준swift
- 프로그래머스swift
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |