반응형

2020 카카오 코딩 테스트 1차 문제

문제풀이

https://tech.kakao.com/2019/10/02/kakao-blind-recruitment-2020-round1/

 

2020 신입 개발자 블라인드 채용 1차 코딩 테스트 문제 해설

올해에도 2020이라는 멋진 숫자와 함께, 카카오의 신입 개발자 채용을 시작했습니다! 그 여정 중 첫 단계로 1차 코딩 테스트가 지난 9월 7일 토요일 오후 2시부터 오후 7시까지 5시간 동안 진행됐는데요. 저희 준비위원들도 설렘과 긴장 속에 원활한 진행을 위해 노력했고, 무사히 1차 테스트를 마칠 수 있었습니다. 테스트에는 총 7문제가 출제됐고, 응시자는 5시간 이내에 순서와 상관없이 문제를 해결해야 […]

tech.kakao.com

여기에 써있는 풀이를 그대로 구현했다.

1. 자물쇠가 N*N 행렬이라면, 3N*3N 매트릭스를 만든 후, 가운데 자물쇠를 배치한다.

2. 열쇠를 매트릭스에 올려놓고 한 칸씩 움직이며 3N*3N 행렬의 가운데가 모두 1이 되는지 확인한다.

3. 2에서 찾지 못한다면 열쇠를 90도 돌려서 다시 2 과정을 수행한다.

4. 4번 돌렸는데도(360도) 찾지 못한다면 불가능한 경우이다.

Python Code

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
class Solution {
    public boolean solution(int[][] key, int[][] lock) {
        int lockLen = lock.length;
        int[][] l = new int[lockLen*3][lockLen*3];
        for(int i=0;i<lockLen;i++) {
            for(int j=0;j<lockLen;j++) {
                l[i+lockLen][j+lockLen] = lock[i][j];
            }
        }
        for(int r=0; r<4;r++) {
            key=rotate(key);
            boolean check = compare(key,l);
            if(check)return true;
        }
        return false;
    }
    public int[][] rotate(int[][] key){
        int len = key.length;
        int[][] ans = new int[len][len];
        for(int i=0;i<len;i++) {
            for(int j=0;j<len;j++) {
                ans[j][len-1-i] = key[i][j];
            }
        }
        return ans;
    }
    public boolean compare(int[][] key, int[][] lock) {
        int keyLen = key.length;
        int lockLen = lock.length;
        int diff = lockLen-keyLen;
        for(int iMove=0; iMove<=diff;iMove++) {
            for(int jMove=0; jMove<=diff;jMove++) {
                int[][] tempKey = new int[lockLen][lockLen];
                for(int i=0;i<keyLen;i++) {
                    for(int j=0;j<keyLen;j++) {
                        tempKey[i+iMove][j+jMove] = key[i][j];
                    }
                }
                boolean check = check(tempKey,lock);
                if(check)return true;
            }
        }
        return false;
    }
    public boolean check(int[][] key, int[][] lock) {
        int len = lock.length/3;
        for(int i=len;i<len*2;i++) {
            for(int j=len;j<len*2;j++) {
                if(key[i][j]+lock[i][j]!=1) {
                    return false;
                }
            }
        }
        return true;
    }
}
cs

Line 17 : 열쇠를 90도 회전시키는 함수이다.

Line 27 : 열쇠를 3N*3N 행렬에 올려놓고 한칸씩 움직이는 과정이다.

Line 45 : 열쇠와 자물쇠가 맞는지 확인하는 함수이다.

문제 링크

 

프로그래머스

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

programmers.co.kr

 

반응형

+ Recent posts