반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 프로그래머스 #카카오 #IT #코딩테스트
- DPDK
- 네트워크
- 알고리즘
- 자바
- 운영체제
- 프로그래머스
- 리눅스
- C
- IT
- 코딩테스트
- 파이썬
- 개발자
- 캐시
- 백엔드
- 스프링
- Python
- docker
- Elasticsearch
- 엘라스틱서치
- springboot
- programmers
- Linux
- Spring
- 쿠버네티스
- 스프링부트
- 카카오
- Java
- 도커
- Kakao
Archives
- Today
- Total
저고데
[프로그래머스]거리두기 확인하기 본문
728x90
반응형
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/81302
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드를 작성하기 위한 순서는 다음과 같다.
1. 좌표값이 P인 경우, 멘허튼 거리가 1인 지점(상하좌우)에 X가 있는 지 확인한다. (X가 있으면 P X P와 같은 경우에도 거리두기를 지켜지는 것이기 때문에 거리가 2인 곳에 P가 있어도 맞는 경우이다.)
2. 멘허튼 거리가 1인 지점에 O가 있다면 O를 기준으로 멘허튼 거리가 1인 지점(상하좌우 중, 현재 해당하는 좌표 제외)에 P가 있는 지 확인하고 있다면 answer에 0을 append한다.
def limit(x, y): #해당 좌표가 5*5를 넘어가는 지 확인하는 함수이다.
if x<0 or x>4 or y<0 or y>4:
return False
return True
def check(x, y, k): #거리두기가 올바르게 지켜지는 지 확인하는 함수이다.
yes=[]
if limit(x+1,y): #현재 P인 좌표에서 아랫쪽의 좌표를 확인하는 부분이다.
if k[x+1][y]=='X': #1번
yes.append('X')
elif k[x+1][y]=='P':
return False
else: #2번
if (x+2<=4 and k[x+2][y]=='P') or (y-1>=0 and k[x+1][y-1]=='P') or (y+1<=4 and k[x+1][y+1]=='P'):
return False
if limit(x-1,y): #현재 P인 좌표에서 윗쪽의 좌표를 확인하는 부분이다.
if k[x-1][y]=='X':
yes.append('X')
elif k[x-1][y]=='P':
return False
else:
if (x-2>=0 and k[x-2][y]=='P') or (y-1>=0 and k[x-1][y-1]=='P') or (y+1<=4 and k[x-1][y+1]=='P'):
return False
if limit(x, y+1): #현재 P인 좌표에서 오른쪽의 좌표를 확인하는 부분이다.
if k[x][y+1]=='X':
yes.append('X')
elif k[x][y+1]=='P':
return False
else:
if (y+2<=4 and k[x][y+2]=='P') or (x-1>=0 and k[x-1][y+1]=='P') or (x+1<=4 and k[x+1][y+1]=='P'):
return False
if limit(x, y-1): #현재 P인 좌표에서 왼쪽의 좌표를 확인하는 부분이다.
if k[x][y-1]=='X':
yes.append('X')
elif k[x][y-1]=='P':
return False
else:
if (y-2>=0 and k[x][y-2]=='P') or (x-1>=0 and k[x-1][y-1]=='P') or (x+1<=4 and k[x+1][y-1]=='P'):
return False
return True
def solution(places):
answer = []
for k in places:
fast=True #한 사람이라도 거리두기를 지키지 않으면 결과를 낼 수 있기 때문에 이를 판별하기 위한 변수이다.
for i in range(len(k)):
for j in range(len(k[i])):
if k[i][j]=='P':
if check(i, j, k)==False: #한 명이라도 거리두기를 지키지 않은 경우이다.
fast=False
break
if fast==False:
answer.append(0)
break
if fast:
answer.append(1)
return answer
결론부터 말하자면 좋게 작성한 코드는 아닌 것 같다.
현재 P인 좌표에서 상하좌우를 판단할 때, 다른 함수를 만들어서 작성했더라면 조금 더 나은 코드가 되지 않았을까 아쉬움이 든다.
또한 bfs를 사용하면 이보다 깔끔한 코드를 작성할 수 있는데, 이제야 dfs 함수를 조금이나 구현할 수 있는 실력이기에 많이 노력해야할 것 같다.
이론보다는 실전에 응용할 수 있도록 손으로 공부하는 것이 아닌 컴퓨터로 공부해야 좋은 개발자로 성정할 수 있지 않을까 생각이 든다. (그래도 맞춰서 기분은 좋았습니다 허허허)
728x90
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스][1차]셔틀버스 (0) | 2023.02.12 |
---|---|
[프로그래머스]햄버거 만들기 (0) | 2023.02.11 |
[프로그래머스]택배 상자 (1) | 2023.02.11 |
[프로그래머스]롤케이크 자르기 (0) | 2023.02.09 |
[프로그래머스][3차]방금그곡 (0) | 2023.02.09 |