Lv 3. 자물쇠와 열쇠

2024. 12. 16. 18:20·Algorithm & Data Structures/Programers

 

https://school.programmers.co.kr/learn/courses/30/lessons/60059

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

이문제는 자물쇠에 해당하는 조합을 찾는 문제이다.

key[][] 와 lock[][] 이 주어질때 key를 90도 단위로 돌려가며

lock에 맞추었을때 빈틈없이 맞아 진다면 true 를 반환하고 false를 반환하는

문제다.

 

단순 구현 풀이법으로 문제를 풀이하였으며 

회전하는 과정에서 90도, 180도, 270도 회전시 어떻게 체크를 해줄지

생각을 해낸다면 쉽게 풀이할 수 있다.

 

int[][] checkLock 을 선언하고 key를 90도로 돌려가며 모든 값을 더해

주었을때 Lock에 해당하는 범위의 배열공간이 1로 가득차있다면 true를 리턴

아니라면 false를 리턴하면서 문제를 풀이하였다.

 

check함수는 확장된 checkLock에 회전한 key를 ++해주어 겹치면 2가되고 겹치지않고 채워지지

않으면 0이된다.

 

isVaild 함수에서는 lock에 해당하는 공간이 1로 가득차 있는지 없는지 검증하는

메서드이다.

 

 

 

import java.util.*;

class Solution {
    public boolean solution(int[][] key, int[][] lock) {
        int point = key.length - 1;
        for(int x = 0 ; x < point + lock.length; x++){
            for(int y = 0 ; y < point + lock.length; y++){
                for(int r = 0 ; r < 4; r++){
                    int size = lock.length+(key.length*2);
                    int[][] checkLock = new int[size][size];
                    for(int i = point ; i < point+lock.length; i++){
                        for(int j = point ; j < point+lock.length; j++){
                            checkLock[i][j] = lock[i-point][j-point]; 
                        }
                    }
                    check(checkLock,key,r,x,y);
                    if(isVaild(checkLock,point,lock.length)) return true;
                }
            }
        }
        return false;
    }
    public void check(int[][] checkLock,int[][] key, int r, int x, int y){
        int len = key.length;
        for(int i = 0 ; i < len ; i++){
            for(int j = 0 ; j < len ; j++){
                if(r == 0){
                    checkLock[x+i][y+j] += key[i][j];    
                }else if(r==1){
                    checkLock[x+i][y+j] += key[len-j-1][i];
                }else if(r==2){
                    checkLock[x+i][y+j] += key[len-i-1][len-j-1];
                }else if(r==3){
                    checkLock[x+i][y+j] += key[j][len-i-1];
                }
            }
        }
    }
    public boolean isVaild(int[][] checkLock,int point, int len ){
        for(int i = point ; i < point+len ; i++ ){
            for(int j = point ; j < point+len ; j++ ){
                if(checkLock[i][j] != 1) return false;
            }    
        }
        return true;
    }
    
}

'Algorithm & Data Structures > Programers' 카테고리의 다른 글

Lv 3. 파괴되지 않은 건물  (0) 2024.12.23
Lv 3. 합승 택시 요금  (1) 2024.12.18
Lv 3. 순위  (0) 2024.12.10
p.퍼즐게임챌린지  (0) 2024.12.06
Lv 3. 풍선 터트리기  (1) 2024.12.04
'Algorithm & Data Structures/Programers' 카테고리의 다른 글
  • Lv 3. 파괴되지 않은 건물
  • Lv 3. 합승 택시 요금
  • Lv 3. 순위
  • p.퍼즐게임챌린지
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (326)
      • Algorithm & Data Structures (246)
        • BOJ (104)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (27)
        • SQL (21)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    후위순회
    PriorityQueue
    unionfind
    동적계획법
    Dijkstra
    스택
    Union-Find
    binarySearch
    구현
    다익스트라
    전위순회
    투포인터
    백준
    BFS
    dp
    dfs
    algorithm
    baekjoon
    programmers
    골드
    프로그래머스
    알고리즘
    Stack
    SQL
    DynamicProgramming
    백트래킹
    이분탐색
    유니온파인드
    경로압축
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
Lv 3. 자물쇠와 열쇠
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.