Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 유니온파인드
- 1편
- BFS
- 코딩테스트
- BaekJoon
- Union-find
- 식단
- 코테
- 투포인터
- 알고리즘
- Algorithm
- 서버개발캠프
- 카카오인턴
- 스마일게이트
- 삼성 #코테 #2020상반기 #c++
- 중반부
- Smilegate
- c++
- 보석쇼핑
- 소감
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 카카오
- LIS #Algorithm #요소추적
- 백준
Archives
- Today
- Total
짱아의 개발 기록장
[Algorithm] 삼성전자 코딩테스트 - 경사로(c++) 본문
반응형
행과 열을 기준으로 각각 구현하면 된다.
행을 기준으로 설명을 해보겠다.
1) 열마다 탐색하며 높이의 차이가 1만큼 나는 곳에 L길이의 경사로를 설치할 수 있는지 확인한다.
2) 경사로를 설치할 수 없으면 총 길의 개수에서 1만큼 빼준다.
*포인트는!! 양 방향으로 탐색해야한다는 것이다*
즉, 한 쪽 방향으로 탐색하고 반대쪽으로도 탐색해야 경사로를 설치할 수 있는 지 없는지 정확하게 파악할 수 있다.
_____|------ 이런 모양도 있는 반면, ----|______이렇게 내려가는 부분도 존재하기 때문이다.
코드 첨부
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
// 경사로
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
int ans, n, l;
int area[101][101] = {0, };
void check()
{
// 행 기준
for(int i=0; i<n; i++){
int visited[101] = {0, };
bool check = true;
for(int j=0; j<n-1; j++){
// 내려감
if((area[i][j]-area[i][j+1])==1){
if((j+1+l)>n){
check = false;
break;
}
int num = 0;
for(int k=j+1; k<j+1+l; k++){
if(area[i][j+1]==area[i][k] && !visited[k]){
visited[k] = 1;
num++;
}
}
if(num!=l){
check = false;
}
}else if((area[i][j]-area[i][j+1])==-1){ // 올라감
if((j+1-l)<0){
check = false;
break;
}
int num = 0;
for(int k=j+1-l; k<j+1; k++){
if(area[i][j]==area[i][k] && !visited[k]){
visited[k] = 1;
num++;
}
}
if(num!=l){
check = false;
}
}else if(abs(area[i][j]-area[i][j+1])>=2){
check = false;
}
}
if(check==false){
ans--;
}
}
// 열 기준
for(int i=0; i<n; i++){
int visited[101] = {0, };
bool check = true;
for(int j=0; j<n-1; j++){
if((area[j][i]-area[j+1][i])==1){
if((j+1+l)>n){
check = false;
break;
}
int num = 0;
for(int k=j+1; k<j+1+l; k++){
if(area[j+1][i]==area[k][i] && !visited[k]){
visited[k] = 1;
num++;
}
}
if(num!=l){
check = false;
}
}else if((area[j][i]-area[j+1][i])==-1){
if((j+1-l)<0){
check = false;
break;
}
int num = 0;
for(int k=j+1-l; k<j+1; k++){
if(area[j][i]==area[k][i] && !visited[k]){
visited[k] = 1;
num++;
}
}
if(num!=l){
check = false;
}
}else if(abs(area[j][i]-area[j+1][i])>=2){
check = false;
}
}
if(check==false){
ans--;
}
}
}
int main()
{
cin>>n>>l;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cin>>area[i][j];
}
}
ans = 2*n;
check();
cout<<ans<<"\n";
return 0;
}
|
cs |
문제 첨부
반응형
'Algorithm > 삼성 sw 역량테스트 기출' 카테고리의 다른 글
[Algorithm] 2020 하반기 삼성전자 코딩테스트 - 컨베이어 벨트 위의 로봇(c++) (0) | 2021.02.07 |
---|---|
[Algorithm] 삼성전자 코딩테스트 - 치킨 배달(c++) (0) | 2020.10.08 |
[Algorithm] 삼성전자 코딩테스트 - 연산자 끼워넣기(c++) (0) | 2020.09.23 |
[Algorithm] 삼성전자 코딩테스트 - 로봇 청소기(c++) (0) | 2020.09.23 |
[Algorithm] 삼성전자 코딩테스트 - 구슬 탈출 2(c++) (0) | 2020.09.21 |
Comments