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
- 피로그래밍
- Python
- MongoDB
- 면접전형
- AWS
- Java
- 솝트 후기
- 페이지네이션
- nodejs
- 프로그래머스
- EC2
- 합격후기
- objectdetection
- 파이썬 #백준 #BFS
- S3
- 솝트
- jwt
- 서류전형
- spring-boot
- 사물인식
- 멋쟁이사자처럼
- jQuery
- 멋사
- 절차지향
- 파이썬
- 카카오
- 인공지능
- 백준
- yolov5
- CRUD
Archives
- Today
- Total
찔끔찔끔씩😎
[프로그래머스] 자물쇠와 열쇠 - python (2020 카카오 블라인드 코딩테스트) 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/60059
문제
열쇠를 자물쇠에 맞춰라.
열쇠는 회전이 가능하다.
해결
함수 구성
1. rotate
: 90 도 회전 함수
2. attach
: new_lock 에 key 값을 넣어준다
3. check
: lock 의 값이 모두 1인지 판별한다
4. detach
: 모두 1이 아니라면 원래의 new_lock으로 되돌려 준다
5. solution (main 함수)
설명
우선, 열쇠가 다 들어 갈 수있는 "lock" 3배 크기의 "new_lock" 을 만들어준다.
가운데에 lock을 위치 시켜준뒤 그 곁을 key 가 반복문으로 순회하며 맞는지 판단한다. ( attach + check )
맞지 않는다면 다시 원래의 new_lock으로 되돌려 준다 . ( detach )
한바퀴 순회했을 때 답이 없다면 90도 회전한뒤 다시 실행한다. ( rotate )
코드
def rotate(a): # 90도 회전 함수
n = len(a)
result = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(n):
result[j][n - i - 1] = a[i][j]
return result
def attach(i,j,key_len,new_lock,key): # new_lock에 넣어보기
for x in range(key_len):
for y in range(key_len):
new_lock[x+i][y+j]+=key[x][y]
def check(new_lock,lock_len): # lock 이 풀리나 check
for i in range(lock_len, lock_len*2):
for j in range(lock_len,lock_len*2):
if new_lock[i][j]!=1 :
return False
return True
def detach(i,j,key_len,new_lock,key): # new_lock에서 다시 없애기
for x in range(key_len):
for y in range(key_len):
new_lock[x+i][y+j]-=key[x][y]
def solution(key, lock):
key_len = len(key)
lock_len = len(lock)
new_lock = [[0] * (lock_len * 3) for _ in range(lock_len * 3)]
for i in range(lock_len): # 중앙에 lock 위치
for j in range(lock_len):
new_lock[i + lock_len][j + lock_len] = lock[i][j]
for _ in range(4):
key = rotate(key) # 90도 회전
for i in range(1, lock_len*2):
for j in range(1, lock_len*2):
attach(i,j,key_len,new_lock,key) # new_lock + key
if check(new_lock,lock_len):
return True
else:
detach(i,j,key_len,new_lock,key) # new_lock - key
return False
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 - python (코딩테스트 고득점 - Kit 해시) (0) | 2022.09.05 |
---|---|
[프로그래머스] 폰켓몬 - python (코딩테스트 고득점 Kit - 해시) (0) | 2022.09.01 |
[프로그래머스] 기둥과 보 설치 - python (2020 카카오 블라인드 코딩테스트) (0) | 2021.11.08 |
Comments