ALGORITHM/Kakao

(C++) 2018 KAKAO BLIND RECRUITMENT[1차] 추석 트래픽

김쿸후 2021. 3. 23. 00:03

1. 문제

programmers.co.kr/learn/courses/30/lessons/17676

 

코딩테스트 연습 - [1차] 추석 트래픽

입력: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15 20:59:58.299 0.8s", "2016-09-15 20:59:58.688 1.041s", "2016-09-15 20:59:59.591 1.412s", "2016-09-15 21:00:00.464 1.466s", "2016-09-15 21:00:00.741 1.581s", "2016-09-1

programmers.co.kr

 

2. 풀이

 1) 타임별 시작 시간과 종료 시간을 구한다.

 2) pair vector에 넣는다.

 3) 새1. 문제

 

programmers.co.kr/learn/courses/30/lessons/17676

 

코딩테스트 연습 - [1차] 추석 트래픽

 

입력: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15 20:59:58.299 0.8s", "2016-09-15 20:59:58.688 1.041s", "2016-09-15 20:59:59.591 1.412s", "2016-09-15 21:00:00.464 1.466s", "2016-09-15 21:00:00.741 1.581s", "2016-09-1

 

programmers.co.kr

 

 

2. 풀이

 

 1) 타임별 시작 시간과 종료 시간을 구한다. (밀리세컨드로 변환)

 2) pair vector에 넣는다.

 3) 새로운 타임이 시작하기 전 1초의 구간(즉 새로운 타임의 시작시간 -999 ~ 새로운 타임의 시작 시간)동안

구간의 시작보다 늦게 끝나면서 && 구간의 끝보다 일찍 시작하는 타임을 찾는다.

 4) answer를 갱신해가며 최대값을 구한다. 

 

3. 코드

#include <string>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;

int solution(vector<string> lines) {
    vector <pair<int,int>> times;
    if(lines.size() == 1){return 1;}
    //시작시간 구하기
    for(int i = 0; i < lines.size();i++){
        int start_time = 0;
        int end_time = 0;
        int during_time = 0;
        pair <int,int> p;
        //종료시간 구하기
        end_time += 36000000 * (lines[i][11]-'0');
        end_time += 3600000 * (lines[i][12]-'0');
        end_time += 600000 * (lines[i][14]-'0');
        end_time += 60000 * (lines[i][15]-'0');
        end_time += 10000 * (lines[i][17]-'0');
        end_time += 1000 * (lines[i][18]-'0');
        end_time += 100 * (lines[i][20]-'0');
        end_time += 10 * (lines[i][21]-'0');
        end_time += 1 * (lines[i][22]-'0');
        
        //진행시간 구하기
        for(int j = 24;j<lines[i].length() -1; j++){
            if(j == 24){during_time += (lines[i][j]-'0') * 1000;}
            else if(j == 25){continue;}
            else{during_time += (lines[i][j]-'0') * pow(10, 28 - j);}
        }
        //시작시간 구하기
        start_time = end_time - during_time + 1;
        p = make_pair(start_time,end_time);
        times.push_back(p);
    }
    
    int answer = 0;
    
    //새로운 처리가 생기기 이전 1초
    for(int i = 0; i < times.size();i++){
        int startNum = times[i].first - 999;
        int element = 0;
        for(int j = 0 ; j < times.size();j++){
            // 구간 내에 존재하면(시작시간이 구간 끝나기 전, 끝나는 시간이 구간 시작한 후)
            if(times[j].second >= startNum && times[j].first <= startNum + 999){
                element++;
            }
        }
        if(element > answer){answer = element;}
    }
    
    return answer;
}

4. 

진짜 아이디어는 개빨리 짰는데 진짜 한 30분? 만에 짰는데

during_time 구하는데 += 라고 쓸거를 +라고만 써서 두시간동안 삽질한거 실화냐ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ아니 에러라도 나던가 에러도 안나고 걍 굴러가서,, 아니 프린트문 한번 찍어보면 될텐데 프로그래머스는 프린트 문도 못찍고 

엉어엉엉엉엉엉엉엉

 

진짜 컴퓨터 부셔버릴번했다

스트레스 받아서 얼굴 벌게지고 피부 간지럽고 진짜,., ,후나히어미ㅓㅎ댜ㅓㅣㅏ엏닝러ㅑㅐㄷㄴ

 

알고리즘은 글을 덤벙거리면서 읽는 나랑 안맞다 진짜.. 후

수도코드 짜는건 진짜 빨리짜는데 꼭 이런 자잘한 실수를 한다

진짜 진짜 진짜

내  죄지 뭐,,, 그래도 많이 늘었다^^*

스트레스 받으면 나만 손해니깐 스트레스 안받기로 했다

내일은 더 잘풀렸으면,, ㅠㅠ