📑 세부 학습 내용
📅 스케쥴
- 4시간 독서 + 궁금한 개념 조사 및 학습 + 2시간 코딩테스트 및 풀이 리뷰
- 총 6시간
🧷 학습 시간 인증
📖 도서 정독 및 실습
실전 레디스 : 기초, 실전, 고급 단계별로 배우는 레디스 핵심 가이드
- 캐싱 등
RDB 의 보조 역할을 해줄 NoSQL 중 가장 범용적이고 유지보수가 잘 진행 중인 Redis 의 구조부터 기초, 심화 내용, 사용법 등을 확실하게 이해하여, 이후의 프로그래밍에 있어 자신 있고 근거 있게 레디스를 채택하고 사용할 수 있는 개발자를 목표로 독서 시작
- 2.7.3 Pub/Sub 기능 (p.147) ~ 2.7.6 자료형과 관계없이 사용 가능한 명령어 (p.203)
- 도서 내 모든 내용 이해 및 실습 완료
✏️ 코딩 테스트
⭕ 문제 풀이
class Solution {
int n;
int m;
int kBoardSize;
public boolean solution(int[][] key, int[][] lock) {
m = key.length;
n = lock.length;
kBoardSize = n + 2 * (m - 1);
int loopSize = kBoardSize - m;
for (int i = 0; i < 4; i++) {
key = rotate(key);
for (int j = -m + 1; j <= loopSize; j++) {
for (int k = -m + 1; k <= loopSize; k++) {
if (checkValid(key, lock, j, k)) {
return true;
}
}
}
}
return false;
}
private int[][] rotate(int[][] key) {
int[][] rotatedKey = new int[m][m];
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
rotatedKey[i][j] = key[m - j - 1][i];
}
}
return rotatedKey;
}
private boolean checkValid(int[][] key, int[][] lock, int row, int col) {
int[][] newLock = new int[n][n];
for (int i = 0; i < n; i++) {
System.arraycopy(lock[i], 0, newLock[i], 0, n);
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
int lockRow = row + i;
int lockCol = col + j;
if (lockRow >= 0 && lockRow < n && lockCol >= 0 && lockCol < n) {
newLock[lockRow][lockCol] += key[i][j];
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (newLock[i][j] != 1) {
return false;
}
}
}
return true;
}
}
- 풀이 실패
- 문제 이해 일부 실패 및 구현 방식을 떠올리지 못함
- 어려운 부분은 풀이 도움 받아가며 구현
- 브루트 포스 및 4중 반복문을 이용한 풀이
key 와 lock 이 겹치는 부분이 존재할 때만 계산하면 됨
- 따라서
N, M == 3 일 때 , lock[0, 0] 만 겹칠 때를 최소, lock[2, 2] 만 겹칠 때를 최대로 잡고 문제 풀이
key 의 크기를 그만큼 확장한 크기 계산
kBoardSize = n + 2 * (m - 1)
lock 의 처음만 겹칠 때와 끝만 겹칠 때 key 의 시작(처음) 위치
- 4번 90도 회전
- 회전 후 가능한 모든
key 의 위치를 기준으로 lock 과의 상호작용 연산
- 반복 시
key 의 시작점은 -(m - 1)로 설정
- 그래야
lock 인덱스 참조를 제대로 수행 가능
- 두 요소 합이 1이 아닌 값이 하나라도 있으면 실패
- 최종 시간복잡도 :
O(N^4)
- 4중 반복문 :
O(N^4)
- 보다 작거나 영향이 적은 연산들의 복잡도는 생략
- 최종 시간복잡도 :
O(N^4)
💡 어려웠던 것 || 알게 된 것