아무코딩

[2020 KAKAO BLIND RECRUITMENT] 자물쇠와 열쇠 본문

알고리즘/프로그래머스

[2020 KAKAO BLIND RECRUITMENT] 자물쇠와 열쇠

동 코 2020. 4. 26. 22:37

더보기

채점을 시작합니다.

정확성 테스트

테스트 1 통과 (0.06ms, 3.79MB)
테스트 2 통과 (0.00ms, 3.8MB)
테스트 3 통과 (1.80ms, 3.84MB)
테스트 4 통과 (0.00ms, 3.8MB)
테스트 5 통과 (0.41ms, 3.82MB)
테스트 6 통과 (0.11ms, 3.84MB)
테스트 7 통과 (5.96ms, 3.88MB)
테스트 8 통과 (8.41ms, 3.77MB)
테스트 9 통과 (1.00ms, 3.8MB)
테스트 10 통과 (2.40ms, 3.86MB)
테스트 11 통과 (9.75ms, 3.86MB)
테스트 12 통과 (0.00ms, 3.86MB)
테스트 13 통과 (0.78ms, 3.91MB)
테스트 14 통과 (0.19ms, 3.83MB)
테스트 15 통과 (1.52ms, 3.79MB)
테스트 16 통과 (6.71ms, 3.91MB)
테스트 17 통과 (0.38ms, 3.78MB)
테스트 18 통과 (4.07ms, 3.77MB)
테스트 19 통과 (0.04ms, 3.77MB)
테스트 20 통과 (5.45ms, 3.77MB)
테스트 21 통과 (2.91ms, 3.88MB)
테스트 22 통과 (1.21ms, 3.79MB)
테스트 23 통과 (0.35ms, 3.75MB)
테스트 24 통과 (0.36ms, 3.87MB)
테스트 25 통과 (7.32ms, 3.82MB)
테스트 26 통과 (9.15ms, 3.79MB)
테스트 27 통과 (15.07ms, 3.87MB)
테스트 28 통과 (1.61ms, 3.89MB)
테스트 29 통과 (0.61ms, 3.8MB)
테스트 30 통과 (2.13ms, 3.94MB)
테스트 31 통과 (4.86ms, 3.79MB)
테스트 32 통과 (9.57ms, 3.8MB)
테스트 33 통과 (2.43ms, 3.89MB)
테스트 34 통과 (0.09ms, 3.91MB)
테스트 35 통과 (0.20ms, 3.83MB)
테스트 36 통과 (0.26ms, 3.91MB)
테스트 37 통과 (0.28ms, 3.8MB)
테스트 38 통과 (0.04ms, 3.83MB)

채점 결과

정확성: 100.0

합계: 100.0 / 100.0

 

테케가 너무많아서 캡처가 되지 않았다...

 

문제풀이

 

키를 4방향으로 돌려가며 완탐하며 모두 맞춰가며 맞춰지는 부분을 카운트한다. 

 

체크하는 부분에서 실수가 좀 있어서 걸렸다.

 

소스코드

더보기
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
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
 
 
vector<vector<int>> turnKey(vector<vector<int>> key,int key_size){
    vector<vector<int>> a(key_size,vector<int>(key_size,0));
    for (int i = 0; i < key_size; i++) {
        for (int j = 0; j < key_size; j++) {
            a[j][key_size - 1 - i] = key[i][j];
 
        }
    }
    return a;
 
}
bool Check(int kr,int kc,vector<vector<int>> key, vector<vector<int>> lock,int check_cnt,int key_size,int lock_size) {
    int cnt = 0;
    for (int i = 0; i < key_size; i++) {
        for (int j = 0; j < key_size; j++) {
            if (i+kr < 0 || i+kr >= lock_size || j+kc < 0 || j+kc >= lock_size)
                continue;
            if (key[i][j] == 1 && lock[i+kr][j+kc] == 0) {
                cnt++;
            }
            else if (key[i][j] == 1 && lock[i+kr][j+kc] == 1)
                return false;
            else if (key[i][j] == 0 && lock[i+kr][j+kc] == 1) {
                continue;
            }
            else if(key[i][j] ==0 && lock[i+kr][j+kc]==0){
                continue;
            }
        }
    }
    if (cnt == check_cnt)
        return true;
    else
        return false;
}
 
 
bool solution(vector<vector<int>> key, vector<vector<int>> lock) {
    int cnt=0;
    int key_size = key.size();
    int lock_size = lock.size();
    for (int i = 0; i < lock_size; i++) {
        for (int j = 0; j < lock_size; j++) {
            if (lock[i][j] == 0) {
                cnt++;
            }
        }
    }
    if(cnt==0)
        return true;
 
    for (int i = 1 - key_size; i < lock_size; i++) {
        for (int j = 1 - key_size; j < lock_size; j++) {
            
            for (int k = 0; k < 4; k++) { //4방향 회전
                if (Check(i, j, key, lock, cnt, key_size,lock_size)) {
//                    cout << i << "," << j <<endl;
//                    for (int r = 0; r < key_size; r++) {
//                        for (int c = 0; c < key_size; c++) {
//                            cout << key[r][c] << " ";
//                        }
//                        cout << endl;
//                    }
//                    cout << endl;
                    return true;
                }
                key = turnKey(key, key_size);
            }
 
 
        }
    }
    return false;
}
 
 
 

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/60059

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Comments