이 글은 수중 쓰레기를 해결하는 자료구조 -(중간)의 글과 이어진다.
https://freakingeniousshawn.tistory.com/6
수중 쓰레기를 해결하는 자료구조-(중간)
데이터 소개 사진은 화면에 보이는것과 같이 한장당 1개 이상의 쓰레기가 최소한 화면의 10분의 1 이상의 크기로 나오도록 사진을 찍었다. 주로 반포천과 반포한강공원에서 찍었다. 정리방법은
freakingeniousshawn.tistory.com
풀고자 하는 문제 소개
요즘 해양 쓰레기 문제가 심각한 상황이며 이를 조금이라도 해결하는 방법으로 요즘 떠오르는것이 바로, '업사이클링'이다.
업사이클링을 주제로, 문제를 설정해 보았다.
문제: S대학교의 의류학과 김학생이 직접 업사이클 가방을 만들려고 한다. 김학생은 수중 쓰레기 데이터(CVS)를 바탕으로 플라스틱 과 캔 종류의 쓰레기가 가장 많이 발견된 순서로 데이터 정렬을 하려고 한다. 플라스틱이나 캔 항목이 있을경우 가중치 1, 둘 다 존재할 경우 가중치 2, 둘다 존재하지 않으면 가중치 0이다. 따라서 가장 가중치가 높은순으로 정렬하여 손쉽게 업사이클 재료를 수거할수 있게 된다.
사용된 데이터
문제에 가중치가 필요한 항목이 플라스틱과 캔이기 때문에, CSV파일에 플라스틱, 캔이 무조건 존재하는 데이터 파일을 선정하였다. 나의 데이터 파일을 제외한 다른 사람의 데이터 파일들을 취합하였다. 총 5개의 파일을 선정하였고, 이 모든 데이터 파일을 합쳐 약 700개의 행을 가진 데이터 파일을 구축하였다.
데이터 파일을 합치는데 사용한 코드이다.
아래에는 최종으로 합쳐 코딩에 사용된 데이터 파일이다.
문제 풀이
언어는 파이썬으로 풀이하였다. 먼저 csv파일을 읽어오고 우선순위 큐를 구현하였다.
라인 바이 라인으로 읽어 반복하게 한후, 읽어오는 행에서 우리가 알고 싶은 플라스틱과 캔이 있는 행목 즉, 'plastics'와 'cans'항목을 확인하여 존재할 경우 큐에 우선순위와 해당 데이터의 순서가 되는 숫자를 삽입하였다.
경우는 네가지로 분류하였다.
1. 'plastics'와 'cans'항목 둘다 존재할 경우
-> 우선순위 2와 해당 데이터 순서 삽입
2. 'plastics' 항목만존재할 경우
-> 우선순위 1와 해당 데이터 순서 삽입
3. 'cans'항목만 존재할 경우
-> 우선순위 1와 해당 데이터 순서 삽입
4. 'plastics'와 'cans'항목 둘다 존재하지 않을 경우
-> 우선순위 0과 해당 데이터 순서 삽입
*중요* : 여기서 삽입된 우선순위는 가중치를 의미한다.
따라서 가중치 크기 순으로 정렬을 하여 프린트한다.
이를 구현한 코드는 아래와 같다.
결과
위와 같이 잘 분류 되었다.
이문제를 해결하므로써 김학생은 업사이클 가방을 만들기 더 수월해질 것이다. 이와 같은 문제를 잘 이용하면 다음과 같은 효과를 기대할 수있다.
앞으로 기대되는 효과
1. 플라스틱과 캔이 아니더라도 다른 항목들을 분류할 수 있으며, 이를 활용해 꼭 가방 뿐이 아닌 다양한 업사이클 제품을 만드는데 도움을 줄수 있음.
2. 말그대로 업사이클 제품의 재료를 구하는 목적으로 설정된 문제이며, 이를 개인이 아닌 업사이클 브랜드들이 이용한다면, 매년 나오는 해양 쓰레기의 양을 대폭 줄일 수 있을 것임.
3. 업사이클 제품을 만들기 위해 일일히 수집하는 고생을 덜었으므로 업사이클 제품을 만드는 과정을 크게 단축시켜 효율을 높였고, 따라서 패션 산업을 비롯한 여러 분야에서 업사이클 활성화를 도모할 수 있게될 것임.
'C++를 이용한 자료구조' 카테고리의 다른 글
벨만포드 알고리즘(Bellman-Ford Algorithm) 이란? + Leet code 743번 문제 풀이(C++) (0) | 2022.12.04 |
---|---|
다익스트라(Dijkstra)알고리즘과, C++ 로 구현한 그래프 (0) | 2022.11.27 |
DFS(Depth-First Search)와 BFS(Breadth-First Search)을 이용한 그래프 탐색 (0) | 2022.11.05 |
수중 쓰레기를 해결하는 자료구조-(중간) (0) | 2022.10.16 |
AVL tree 란? - C++로 알아보는 AVL tree +(Leet code 110번 문제 풀이) (0) | 2022.10.02 |