풀이과정 1차 시도(실패) 먼저, times를 오름차순 정렬한 뒤, etimes라는 벡터를 만든다. times의 index에 대응하는 심사관에게 지금 대기할 경우, 대기자의 업무가 끝나는 시간이다. for(int index = 0; index < n; index++) { int min_index = min_element(etimes.begin(),etimes.end())-etimes.begin(); etimes[min_index] += times[min_index]; } 들어가는 사람마다 etimes이 최소값인 index를 찾고, etimes를 업데이트해준다(검사시간만큼 더함) [사람][etimes] [1][14,10] [2][14,20] [3][21,20] [4][21,30] [5][28,30] [6]..

요약 routes 오름차순 정렬 카메라 범위 설정풀이과정순서대로 routes를 체크하기 위해 sort해준다. 예제[[-20,-15], [-14,-5], [-18,-13], [-5,-3]]의 경우 [[-20,-15], [-18,-13],[-14,-5],[-5,-3]] 으로 정렬한단 얘기 이후 각 자동차마다 camera 설치 가능 범위를 정한다. 맨 처음 자동차를 감시할 수 있는 범위 두번째의 경우 (-18,-15)로 줄어든다. 세 번째의 경우 더이상 하나의 카메라로 감시할 수 없게 됐다. 검사 조건은 camera 범위의 end값과 routes[i][0] 값을 비교하면 된다. 이런 식으로 구현하였다. 코드 #include #include #include #include using namespace std; ..

요약 경우의 수 파악 풀이과정 솔직히 이렇게 풀라고 낸 의도는 아닐텐데... 수학식을 세워서 풀었다. 자릿수마다 A,E,I,O,U가 가능하니 5를 그만큼 곱한다. A _ _ _ _ 의 경우의 수는 5자리인 경우 5*5*5*5 4자리인 경우 5*5*5 3자리인 경우 5*5 2자리인 경우 5 1자리인 경우 1(5^0) 인 것이다. 예를 들어, 맨 앞자리가 E이면 A _ _ _ _ 인 경우의 수만큼 앞에 존재하는 것이라 생각해서 식을 세웠다. AAAAE A (1-1)*(5^4+5^3+5^2+5^1) + 1 A (1-1)*(5^3+5^2+5^1) + 1 A (1-1)*(5^2+5^1) + 1 A (1-1)*(5^1) + 1 E 2 AAAE A (1-1)*(5^4+5^3+5^2+5^1) + 1 A (1-1)*(5..

요약 BFS 적용 풀이 과정 BFS를 적용해서 상, 하, 좌, 우로 갈 때 해당 좌표가 특정 rectangle의 내부에 있지 않고 bool inRect(vector rectangle, int x, int y) { //하나라도 rect 안이면 true for(vector r : rectangle) { if((r[0] < x && x < r[2]) &&(r[1] < y && y < r[3])) return true; } return false; } 1-50사이 범위이며 rectangle의 선 위에 있는 좌표 bool onRectLine(vector rectangle, int x, int y) { for(vector r : rectangle) { if((x==r[0] && (r[1]
요약 BFS 적용 문자열의 문자 비교풀이과정 이 문제는 최소 단계의 과정을 거쳐 변환하는 것을 물어보고 있다. 따라서 BFS가 적합하다. 이를 위해 Queue로 구현할 것이다.1. 문자열 비교 함수 만들기 bool bCanChng(string a, string b) { //문자열 a가 b로 변환이 가능한지 True, False를 반환하는 함수 int diffCnt = 0; int len = a.length(); for(int i = 0; i 1) return false; } } return diffCnt == 0 ? false : true; //아예 같은 경우 배제(begin == begin) } 문자열..

요약 dequeue를 사용하기 문자열 자르기, 비교, 정수화 sort 풀이과정 최대 최소값이 필요하며 최대 최소값을 pop한다. -> 오름차순 정렬하는 dequeue C++의 덱은 deque로 선언한다. 1. 자료형 결정 deque deq; 2. 반복문 및 조건 설정 1. 명령어 자르기, 비교 및 정수화 맨 첫번째 문자로 D과 I를 판별하고, op.substr(2)를 통해 2~끝까지 숫자 영역을 자를 수 있다. 이를 stoi로 int형으로 변환한다. 2. 정렬 타이밍 삽입할 때마다 매번 sort하기보다는, 삭제를 할 때 정렬하는 방법을 생각했다. 단, 삭제가 연속으로 일어난 경우도 정렬할 필요가 없다. 이를 위해 outdated 라는 bool 변수를 기본값 true로 선언한다.(첫 정렬은 무조건 일어나게..

요약 vector 정렬 Priority Queue 적용 및 구조체 내부 연산자 오버로딩을 통한 정렬 컨트롤러 내부 로직 풀이과정 우선 예제에서 나왔듯이, 평균 대기시간이 가장 짧은 스케줄러는 최단작업 우선 스케줄링(Shortest Job Controller)이다. 평균 대기시간을 최소화하는데에 중점을 두었으나, 지속적으로 양보하는 상태인 '기아 상태'가 발생할 수 있다. 아무튼.. 요구 조건에 따라 SJF를 구현하는 문제이다. 1. Vector 정렬 일단, input으로 주어지는 jobs가 들어온 시간순으로 정렬되어있으리란 보장이 없었다. 그리고 들어온 시간이 같은 경우, 소요 시간이 짧은 순으로도 초기 정렬을 해주었다. bool cmp(vector a, vector b) { return a[0]==b[..

요약 Bottom-Top 방식의 DP 적용 풀이과정 1. DP 배열 셋팅하기 표시를 쉽게 하기 위해 index 0은 사용하지 않고, 크기가 n+1,m+1인 배열을 선언한다. 그리고 0으로 초기화한다음, (1,1) 값만 1로 초기화한다. int DP[n+1][m+1]; memset(DP,0,sizeof(DP)); DP[1][1] = 1; 2. 점화식 짜기 굉장히 직관적으로, DP[i][j] = DP[i-1][j] + DP[i][j-1] 이라는 것을 알 수 있다. 물론 i,j의 범위를 고려해줘야 함. 3. puddle과 예제의 경우 0 0 0 0 0 0 1(집) 0 0 0 0 0 0 0 0 0 0 0 0 학교 이러한 상황인데, 만약, DP[i][j]가 puddle이라면 무조건 0으로 한다. 그렇게 하면, 나..

요약 분할 정복을 위한 점화식 만들기 풀이과정 문제 풀이 방법은 금방 떠올린데 반해, 코드를 깔끔하게 다시 짜는데에 있어서 좀 많이 애먹었다. 시간도 오래 걸렸다. 1. 숫자와 연산자 분리하기 이렇게 안해도 되는데 직관적인 코딩을 위해 분리하였다. void init(vector arr, vector &nums, vector &ops) { // 숫자와 연산자로 나눠 저장 for(int i = 0; i < arr.size(); i++) { if(i%2 == 0) { nums.push_back(stoi(arr[i])); } else { ops.push_back(arr[i]); } } } 2. 풀 방법 정하기 나는 Bottom-Top 방식의 문제풀이 방법을 택했다. 가장 작은 단위의 연산은 최대값이 명백하게 정..

요약 주어진 입출력 가공 queue를 이용한 BFS 구현 풀이과정 1. 데이터 가공 추후 BFS를 편하게 구현하기 위해서 주어진 wires vector를 unordered_map 형태로 변경하였다. unordered_map mp; for(int i = 0; i < wires.size(); i++) { mp[wires[i][0]].push_back(wires[i][1]); mp[wires[i][1]].push_back(wires[i][0]); } 첫번째 문제의 경우 이렇게 값을 재구성했다. 2. BFS 구현 이제 모든 wires의 element에 대해 BFS 탐색을 한다. 첫번째 테스트케이스를 예시로 들자면, [4,7]을 끊었다 가정하였을 경우 첫번째 요소인 4와 연결된 노드를 BFS를 통해 파악할 것이다..