| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- string
- binary search
- 코딩테스트
- 문자열
- Algorithm
- heap
- 힙
- DFS
- 알고리즘
- Greedy
- 정렬
- django
- DVWA
- DP
- Queue
- 완전탐색
- sort
- graph
- 백준
- 큐
- BFS
- 그래프
- 동적계획법
- 프로그래머스
- Code Refactoring
- Brute Force
- 카카오 기출
- 탐욕법
- programmers
- Dynamic Programming
- Today
- Total
생각과 고민이 담긴 코드
프로그래머스 - 거리두기 확인하기 (2021 카카오 채용연계 인턴십) / Level 2 본문
문제 : https://programmers.co.kr/learn/courses/30/lessons/81302
코딩테스트 연습 - 거리두기 확인하기
[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1]
programmers.co.kr
풀이
def solution(places):
answer = []
global dx
global dy
global room
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
n = 5
for place in places:
flag = False
room = [list(i) for i in place]
for i in range(n):
for j in range(n):
if room[i][j] == 'P':
if firstSearch(i, j) == 0:
flag = True
break
if flag:
break
if flag:
answer.append(0)
else:
answer.append(1)
return answer
def firstSearch(x, y):
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < 5 and 0 <= ny < 5:
if room[nx][ny] == 'P':
return 0
elif room[nx][ny] == 'O':
if secondSearch(nx, ny, x, y) == 0:
return 0
def secondSearch(x, y, start_x, start_y):
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < 5 and 0 <= ny < 5 and (nx != start_x or ny != start_y):
if room[nx][ny] == 'P':
return 0
return 1
오랜만에 푼 문제라 그런지 어렵진 않았지만 시간이 조금 걸린 문제였다.
전형적인 탐색 문제였지만 DFS, BFS를 사용하여 풀 수 도 있지만 맨해튼 거리가 2 이하에 응시자가 있는지
확인만 하면 되기 때문에 탐색 함수를 2번 호출해주면 된다.
첫번째 탐색할 때와 두 번째 탐색할 때 조건이 조금 다르게 때문에 함수를 따로 만들어 주었으며
탐색 도중 다른 응시자가 나오면 무조건 거리두기를 안 지켰다고 판단하고 break 해주었다.
첫 번째 탐색을 하고 만약 빈 공간이라면 해당 지점에서 두 번째 탐색을 진행하였다.
두 번째 탐색을 진행하고도 다른 응시자가 나오지 않으면 거리두기 지킨 것으로 판단하였다.
ps. 오랜만에 알고리즘 코딩을 해서 그런지 코드가 조금 지저분한 것 같다.
인턴 하느라 시간이 많이 부족하지만 그래도 하루에 하나씩은 푸는 걸 목표로 하고 있다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 - 수식 최대화 (2020 카카오 인턴십) / Level 2 (0) | 2022.01.13 |
|---|---|
| 프로그래머스 - 키패드 누르기 ( 2020 카카오 인턴십) / Level 1 (0) | 2022.01.03 |
| 프로그래머스 - 신규 아이디 추천 (2021 KAKAO 블라인드 채용) / Level 1 (0) | 2021.12.12 |
| 프로그래머스 - 숫자 문자열과 영단어 (2021 카카오 채용연계 인턴십) / Level 1 (0) | 2021.12.05 |
| 프로그래머스 - 로또의 최고 순위와 최저 순위 (2021 Dev-Matching 웹백엔드) / Level 1 (0) | 2021.12.04 |