Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 2020 KAKAO BLIND
- Spring
- 1로 만들기
- 문자열 압축
- 다이나믹 프로그래밍
- 알고리즘
- 스프링 MVC
- 완도산회
- 2638
- mvc
- 2589
- dp
- 쓰레드 풀
- 동적 프로그래밍
- 설탕 배달
- 양꼬치
- 호유동
- BFS
- 서블릿
- 투어
- 포두부 보쌈
- 스프링
- 고모네 콩탕
- 프로그래머스
- HTTP API
- 백준
- 맛집
- 2839
- Servlet
- 맛집 투어
Archives
- Today
- Total
프로그래밍 공방
[프로그래머스] 자물쇠와 열쇠 본문
문제
programmers.co.kr/learn/courses/30/lessons/60059
코딩테스트 연습 - 자물쇠와 열쇠
[[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true
programmers.co.kr
문제해결방법
1. 열쇠의 크기를 M, 자물쇠의 크기를 N이라고 했을때, M+2*N 길이의 이차 배열을 만들어 준다.
2. 가운데에 키를 두고 자물쇠를 좌측 맨 위부터 우측 M+N 까지 돌면서 키로 열리는지 확인한다.
3. 위 과정을 키를 회전시켜가며 반복한다.
4. 반복 중에 자물쇠가 열린다면 true, 열리지 않는다면 false를 반환한다.
코드
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 | package Programmers; public class Solution_자물쇠와열쇠 { public static int N, M; public static int[][] lockMap; public static void rotation(int[][] map, int i, int j, int length) { int[] num = new int[length*length]; int index = 0; for(int x = 0; x<length; x++) { for(int y=0; y<length; y++) num[index++] = map[x+i][y+j]; } index = 0; for(int x = length-1; x>=0; x--) { for(int y=0; y<length; y++) map[y+i][x+j] = num[index++]; } } public static boolean solution(int[][] key, int[][] lock) { boolean answer = false; N = lock.length; M = key.length; lockMap = new int[M+2*N][M+2*N]; for(int i=0; i<key.length; i++) { for(int j=0; j<key[i].length; j++) lockMap[i+N][j+N] = key[i][j]; } rot:for(int r=0; r<4; r++) { for(int i=0; i<lockMap.length-N; i++) { loop:for(int j=0; j<lockMap[i].length-N; j++) { for(int li=0; li<lock.length; li++) { for(int lj=0; lj<lock[li].length; lj++) { if((lock[li][lj]^lockMap[i+li][j+lj])==0) continue loop; } } answer = true; break rot; } } rotation(lockMap, N, N, key.length); } return answer; } public static void main(String[] args) { int[][] key = {{0, 0, 0}, {1, 0, 0}, {0, 1, 1}}; int[][] lock = {{1, 1, 1}, {1, 1, 0}, {1, 0, 1}}; System.out.println(solution(key, lock)); } } | cs |
코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.
'개발 > 문제해결' 카테고리의 다른 글
[백준] 14501번 : 퇴사 (0) | 2020.11.25 |
---|---|
[백준] 9372번 : 상근이의 여행 (0) | 2020.11.24 |
[백준] 20058번 : 마법사 상어와 파이어스톰 (0) | 2020.11.22 |
[프로그래머스] 다리를 지나는 트럭 (0) | 2020.11.22 |
[프로그래머스] 추석 트래픽 (0) | 2020.11.22 |