YoonWould!!

[삼성SWTest준비]14890번 경사로 본문

<SW>/알고리즘 + 자료구조

[삼성SWTest준비]14890번 경사로

Hading 2018. 10. 1. 20:10
728x90

URL : https://www.acmicpc.net/problem/14890


삼성SW 기출 문제 한 번에 보기 : https://www.acmicpc.net/workbook/view/1152




※삼성 SW 역량평가 기출문제 어떻게 풀지?


조건을 토대로 코드를 작성했던 것 같습니다. 

행으로 봤을 때 3 가지 조건을 찾았습니다.


1. 옆칸이랑 같을 때


2. 클 때


3. 작을 때


※필요 역량 정리하기!!!※

1. memset 헤더는 #include<string.h> <= 이걸 안적어주면 백준에서 컴파일 에러납니다.

2. 결국, 브루트 포스




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
#include<iostream>
#include<string.h> // memset 헤더 함수
#include<algorithm>
using namespace std;
int n, l;
int visit[101= { 0 };
int map1[101][101= { 0 };
int map2[101][101= { 0 };
int cnt;
 
 
 
void check(int row, int index, int map[101][101]) { //가로
    if (index == n - 1) {
        cnt++;
        return;
    }
    if (map[row][index] == map[row][index + 1]) {
        check(row, index + 1, map);
    } // 같은 경우
    else if (map[row][index] == map[row][index + 1- 1) {
        if (index - l + 1 < 0) {
            return;
        }
        for (int i = 0; i < l; i++) {
            if (!visit[index - i]) {
                visit[index - i] = 1;
            }
            else return;
        }//뒤로 물러난다.
        check(row, index + 1, map);
    } // 클 경우
    else if (map[row][index] == map[row][index + 1+ 1) {
        if (index + l > n -1) {
            return;
        }
        for (int i = 1; i <= l; i++) {
            if (!visit[index + i] && map[row][index] == map[row][index + i]+1) {
                visit[index + i] = 1;
            }
            else return;
        }
        check(row, index + 1, map);
    } // 작은 경우
}
 
int main() {
    cin >> n >> l;
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> map1[i][j];
            map2[j][i] = map1[i][j];
        }
    }
 
    for (int i = 0; i < n; i++) {
        memset(visit, 0sizeof(visit));
        // 항상 memset을 해줘야 함, 한 행 한 
        check(i,0,map1);
        memset(visit, 0sizeof(visit));
        check(i, 0, map2);
    }
 
    cout << cnt;
    return 0;
}
cs


728x90