반응형
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 | 31 |
Tags
- 2018카카오
- 코테
- 백트레킹
- ai부수입
- 구글애드몹
- 그리디
- 브루드포스
- 파이썬
- 바이브코딩
- 2020카카오
- 콜랩오류
- 밸만포드
- AI논문
- DP
- Python
- 논문추천
- 프로그래머스
- 부수입
- 투포인터
- 앱제작
- 2021카카오
- 코딩오류
- pccp
- 에라스테네스의 체
- 투잡
- 2018캐시
- 밸만포드알고리즘
- 코딩테스트
- 백준
- 코딩테스크
Archives
- Today
- Total
kiteday 님의 블로그
[프로그래머스-파이썬] 자물쇠와 열쇠 본문
반응형
SMALL
https://school.programmers.co.kr/learn/courses/30/lessons/60059
이 코드는 1. 열쇠를 90도씩 회전해가면서 2. 자물쇠와 일치하는지 확인하는 과정이 필요하다.
어렵다기 보다 범위 연산을 잘 해줘야하는 문제.
def check(key, lock, n):
for x in range(len(lock)-len(key)+1):
for y in range(len(lock)-len(key)+1):
for a in range(len(key)):
for b in range(len(key)):
lock[x+a][y+b] += key[a][b]
flag = True
for a in range(n):
for b in range(n):
if lock[len(key)-1+a][len(key)-1+b] != 1:
flag = False
break
if not flag:
break
for a in range(len(key)):
for b in range(len(key)):
lock[x+a][y+b] -= key[a][b]
if flag:
return True
return False
def rotate(key):
m = len(key)
new_key = [[0 for _ in range(m)]for _ in range(m)]
for x in range(m):
for y in range(m):
new_key[y][m-1-x] = key[x][y]
return new_key
def solution(key, lock):
answer = False
m = len(key)
n = len(lock)
board = [[0 for _ in range(2*(m-1)+n)] for _ in range(2*(m-1)+n)]
for x in range(m-1, m-1+n):
for y in range(m-1, m-1+n):
board[x][y] = lock[x-(m-1)][y-(m-1)]
for i in range(4):
if check(key, board, n):
return True
key = rotate(key)
return answer
rotate나 solution 함수를 만드는 건 어렵지 않았는데 check함수는 많이 헷갈렸었다.
크게 실수한 부분은 자물쇠에 열쇠를 넣어보고 안맞으면 그걸 빼야한다는 것. 빼는 코드가 없어서 오답이었다.
LIST
'코딩테스트' 카테고리의 다른 글
| [프로그래머스-파이썬] 보석쇼핑 (0) | 2025.12.02 |
|---|---|
| [프로그래머스-파이썬] 순위검색 (1) | 2025.12.01 |
| [프로그래머스-파이썬] 합승 택시 요금 (0) | 2025.12.01 |
| [프로그래머스-파이썬] 혼자서 하는 틱택토 (1) | 2025.11.30 |
| [프로그래머스-파이썬] 표현 가능한 이진트리 (0) | 2025.11.26 |