기록하지 않았다면 잃어버릴 시간들
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
블로그 내 검색

기록하지 않았다면 잃어버릴 시간들

새로운 것을 배우는게 즐거운 개발자입니다.

  • 알고리즘/프로그래머스

    Programers 과제 진행하기/ C++

    2023. 4. 1.

    by. 내이름은 킹햄찌

    https://school.programmers.co.kr/learn/courses/30/lessons/176962

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    아이디어

    시간 초단위 변경과 데이터 시간순 정렬을 해두고, 다음과제 시작시간 - 현재 과제 시작 시간으로 과제간의 시간을 구한 후 현재 과제가 다 끝날 수 없다면 stack에 저장하고 끝나거나 시간이 남는다면 현재 과제를 완료 처리 후 stack에 있는 과제 처리 여부를 판단하면 된다.

     

    #include <string>
    #include <vector>
    #include <algorithm>
    #include <stack>
    using namespace std;
    class Homework {
    public:
    	Homework(string _name, int _start, int _left) {
    		name = _name;
    		start = _start;
    		left = _left;
    	}
    	string name = "";
    	int start = 0;
    	int left = 0;
    };
    
    int time2sec(string t) {
    	if (t.size() < 5) return 0;
    	return (stoi(t.substr(0, 2)) * 60 + stoi(t.substr(3, 2)));
    }
    vector<string> solution(vector<vector<string>> plans) {
    	vector<string> answer;
    	vector<Homework> arr;
    	for (auto iter : plans) {
    		arr.push_back(Homework(iter[0], time2sec(iter[1]), stoi(iter[2])));
    	}
    	sort(arr.begin(), arr.end(), [](Homework a, Homework b) {return a.start < b.start; });
    	stack<int> stk;
    	for (int i = 0; i < arr.size()-1; i++) {
    		int diff = arr[i + 1].start - arr[i].start;
    		if (diff >= arr[i].left) {
    			answer.push_back(arr[i].name);
    			diff -= arr[i].left;
    			arr[i].left = 0;
    		}
    		else {
    			arr[i].left -= diff;
    			diff = 0;
    			stk.push(i);
    		}
    		while (diff > 0 && !stk.empty()) {
                arr[stk.top()].left -= diff;
                diff = 0;
                if(arr[stk.top()].left > 0) continue;
                diff = -arr[stk.top()].left;
                answer.push_back(arr[stk.top()].name);
    			stk.pop();			
    		}
    	}
    	answer.push_back(arr[arr.size()-1].name);
    	while (!stk.empty()) {
    		answer.push_back(arr[stk.top()].name);
    		stk.pop();
    	}
    	return answer;
    }

    '알고리즘 > 프로그래머스' 카테고리의 다른 글

    Programers 추억 점수/ C++  (0) 2023.04.01
    Programers 공원 산책/ C++  (0) 2023.03.29
    Programers 광물 캐기/ C++  (0) 2023.03.29
    Programers 덧칠하기/ C++  (0) 2023.03.04
    Programers 바탕화면 정리/ C++  (0) 2023.03.04

    댓글

    관련글

    • Programers 추억 점수/ C++ 2023.04.01
    • Programers 공원 산책/ C++ 2023.03.29
    • Programers 광물 캐기/ C++ 2023.03.29
    • Programers 덧칠하기/ C++ 2023.03.04
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
내이름은 킹햄찌

티스토리툴바