티스토리 뷰
title: "외벽 점검"
category: 프로그래머스[Level-3]
tags: [C++, JavaScript, 프로그래머스]
date: "2021-02-14"
문제 링크
C++
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(int n, vector<int> weak, vector<int> dist) {
int answer = 9; // 최대
sort(dist.begin(), dist.end()); // for. next_permutation()
for(int i=0; i<weak.size(); i++){
// 완전탐색, 취약위치 시작지점마다
do{
// 완전탐색, dist 순서 바꿔가면서
int w=0; // weak 인덱스
for(int d=0; d<dist.size(); d++){
int after=weak[w]+dist[d]; // 취약위치 지점에서 시작한 1시간 후 지점
while(w<weak.size()){
if(after<weak[w]) break; // 취약위치에 도달 못함
w++;
}
if(w==weak.size()){
// 취약 지점 모두 해결
answer=min(answer, d+1);
break;
}
}
}while(next_permutation(dist.begin(), dist.end()));
weak.push_back(weak.front()+n); // 직선화
weak.erase(weak.begin()); // 앞에꺼 삭제
}
answer=answer==9?-1:answer; // 취약지점 해결 불가
return answer;
}
JavaScript
function solution(n, weak, dist) {
var answer = 9; // 최대
const getPermu = (arr, select) => {
if (select === 1) return arr.map((v) => [v]);
else {
const result = [];
arr.forEach((val, idx) => {
const fixed = val; // 1개 선택
const restArr = arr.filter((v, i) => idx !== i); // 나머지 배열
const permuArr = getPermu(restArr, select - 1); // 재귀
const mergeArr = permuArr.map((v) => [fixed, ...v]); // 합치기
result.push(...mergeArr);
});
return result;
}
};
const distPermu = getPermu(dist, dist.length); // 순열
for (let i = 0; i < weak.length; i++) {
// weak 시작지점마다
distPermu.forEach((newDist) => {
// dist 순서 변경한 newDist마다
let w = 0; // weak index
for (let d = 0; d < newDist.length; d++) {
const after = weak[w] + newDist[d]; // 취약지점부터 1시간 후 지점
while (w < weak.length) {
if (after < weak[w]) break; // 취약지점 해결 못함
w++;
}
// 취약지점 모두 해결
if (w === weak.length) {
answer = Math.min(answer, d + 1);
break;
}
}
});
weak.push(weak[0] + n); // 직선화
weak.shift(); // 앞에꺼 제거
}
answer = answer === 9 ? -1 : answer; // 해결 못함
return answer;
}
728x90
반응형
'Programmers Solutions > Level-3' 카테고리의 다른 글
[프로그래머스] 최고의 집합 (0) | 2021.02.16 |
---|---|
[프로그래머스] 배달 (0) | 2021.02.15 |
[프로그래머스] 거스름돈 (0) | 2021.02.13 |
[프로그래머스] 멀리 뛰기 (0) | 2021.02.13 |
[프로그래머스] 기둥과 보 설치 (0) | 2021.02.12 |
댓글