-

[SWEA_모의SW역량테스트] 4014번 - 활주로 건설 본문

1-2. SWEA

[SWEA_모의SW역량테스트] 4014번 - 활주로 건설

asdklfjlasdlfkj 2020. 1. 27. 13:52

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeW7FakkUDFAVH

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

삼성 SWEA 모의 SW역량 테스트 문제다.

이 문제는 삼성 SW역량 테스트 기출문제 https://cpp-dev.tistory.com/53 와 동일한 문제다.

이번에는 C언어로 짜보았다.

주어진 테스트 케이스에 대한 정답은 

#1 7

#2 4

#3 11

#4 11

#5 15

#6 4

#7 4

#8 1

#9 5

#10 8 였다.

그래서 코드 작성하고 테스트 케이스에 대해 돌려 결과를 확인했더니 아래와 같은 결과가 나와서 틀리게 짠 줄 알았다.

문제의 결과

그래서 뭐가 틀렸나 계속 보는데 틀린게 없어서 그냥 제출했더니 SWEA 채점 서버에서는 맞는 테스트케이스 정답을 출력했다.. 최종 제출결과도 역시 Pass였다..

 

뭔가 이상한 ..

 

아래는 C언어 기반 정답코드.

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
#include <stdio.h>
#pragma warning(disable:4996) // --> VS2013 콘솔 동작용
//#define _CRT_SECURE_NO_WARNINGS --> SWEA 제출용
int map[20][20];
int T, N, X;
 
void reset_map(){
    for (int i = 0; i < 20; i++){
        for (int j = 0; j < 20; j++){
            map[i][j] = -1;
        }
    }
}
 
int confirm(int line[]){
    int check[20];
    for (int i = 0; i < 20; i++) check[i] = -1;
    // 건설 가능하면 1, 건설 못하면 0반환
    for (int i = 1; i < N; i++){
        int diff = line[i] - line[i - 1];
        if (diff < -1 || diff > 1return -1;
        else{
            if (diff == 1){
                // 올라가는 경우
                if (i - X < 0return -1;
                for (int j = 1; j <= X; j++){
                    if (check[i - j] == 1return -1;
                    if (line[i - 1!= line[i - j]) return -1;
                    check[i - j] = 1;
                }
            }
            else if (diff == -1){
                // 내려가는 경우
                if (i + X - 1 >= N) return -1;
                for (int j = 1; j <= X; j++){
                    if (check[i + j - 1== 1return 0;
                    if (line[i] != line[i + j - 1]) return 0;
                    check[i + j - 1= 1;
                }
            }
        }
    }
    return 1;
}
 
int main(){
    scanf("%d"&T);
    for (int tc = 1; tc <= T; tc++){
        reset_map();
        scanf("%d %d"&N, &X);
        for (int i = 0; i < N; i++){
            for (int j = 0; j < N; j++){
                scanf("%d"&map[i][j]);
            }
        }
        int answer = 0;
        // 횡방향 검사
        for (int r = 0; r < N; r++){
            int line[20];
            for (int j = 0; j < 20; j++) line[j] = -1;
            for (int c = 0; c < N; c++){
                line[c] = map[r][c];
            }
            if(confirm(line)==1) answer++;
        }
        // 종방향 검사
        for (int c = 0; c < N; c++){
            int line[20];
            for (int j = 0; j < 20; j++) line[j] = -1;
            for (int r = 0; r < N; r++){
                line[r] = map[r][c];
            }
            if(confirm(line)==1) answer++;
        }
        printf("#%d %d\n", tc, answer);
    }
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

Comments