일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 2018 KAKAO BLIND RECRUITMENT 1차
- CS 스터디
- 자바
- 프로그래머스
- c++
- set
- bfs
- 부스트코스
- gcp
- map
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- 2019 카카오 공채
- 2018 카카오 공채
- 비트마스크
- 백준
- gradle
- 2020 카카오 공채
- dfs
- 카카오 공채
- 2018 카카오
- 카카오
- 2019 KAKAO BLIND RECRUITMENT
- 2018 KAKAO BLIND RECRUITMENT
- Baekjoon
- 2020 KAKAO BLIND RECRUITMENT
- 삼성 SW 기출문제
- 젠킨스
- 삼성 SW 역량테스트
- 알고리즘
- Java
Archives
- Today
- Total
아무코딩
[2020 KAKAO BLIND RECRUITMENT] 외벽 점검 본문
문제풀이
구현은 쉽지만 문제 풀이 아이디어를 생각하는게 어려웠던 문제였다.
deque를 사용하여 0을 다시 넘는 경우를 11->1인 경우가 11 ->13 이 되도록 변경하여 계속 업데이트 해준뒤
next_permutation을 사용하여 완탐을 진행하였다.
먼저 갯수를 1부터 점점 키워나가며 -> 매 갯수 시작마다 deque를 초기화 -> 넥퍼뮤를 통한 완탐으로 모든 경우를 따져가며 성공시 해당갯수를 반환하여 끝내는 방식으로 구현하였다.
소스코드
더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <deque>
using namespace std;
deque<int> dq;
bool Permutation(vector<int> dist,int cnt){
sort(dist.begin(),dist.end()); //큰게 앞에오게
do{
int start_idx = 0;
// cout<<"dq"<<" : ";
// for(int i=0;i<dq.size();i++)
// cout<<dq[i]<<" ";
// cout<<endl;
for(int i=0;i<cnt;i++){
int able_dist =dq[start_idx]+dist[i];
// cout<<start_idx<<","<<dist[i]<<endl;
int j=start_idx;
for(;j<dq.size();){
if(dq[j]<=able_dist){
j++;
}
else{
start_idx = j;
break;
}
}
if(j==dq.size()){//끝까지 간경우
// cout<<"success"<<endl;
// for(int i=0;i<dist.size();i++){
// cout<<dist[i]<<" ";
// }
// cout<<"\n";
cout<<cnt<<endl;
return true;
}
}
}while(next_permutation(dist.begin(), dist.end()));
return false;
}
int solution(int n, vector<int> weak, vector<int> dist) {
int answer = 0;
//cout<<"!!!"<<endl;
//한번씩 시작지점이 되도록
//앞에서 한번 뒤에서한번 시작해 줄거임.
for(int i=1;i<=dist.size();i++){
for(int i=0;i<weak.size();i++){
dq.push_back(weak[i]);
}
for(int j=0;j<=weak.size();j++){
if(Permutation(dist,i))
return i;
int temp = dq.front();
temp += n;
dq.pop_front();
dq.push_back(temp);
}
}
return -1;
}
int main(){
int n = 12;
vector<int> weak = {1,3,4,9,10};
vector<int> dist = {3,5,7};
cout<<solution(n,weak,dist)<<endl;
}
|
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/60062
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[2018 KAKAO BLIND RECRUITMENT 3차] n진수 게임 (0) | 2020.05.01 |
---|---|
[2018 KAKAO BLIND RECRUITMENT 3차] 파일명 정렬 (0) | 2020.04.29 |
[2020 KAKAO BLIND RECRUITMENT] 자물쇠와 열쇠 (0) | 2020.04.26 |
[2018 KAKAO BLIND RECRUITMENT 3차] 압축 (0) | 2020.04.24 |
[2018 KAKAO BLIND RECRUITMENT 3차] 자동완성 (0) | 2020.04.19 |
Comments