기록하는삶
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 거리두기 확인하기 본문
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/81302
2021 카카오 채용 연계형 인턴십 문제다.
[문제 설명]
개발자를 희망하는 죠르디가 카카오에 면접을 보러 왔습니다.
코로나 바이러스 감염 예방을 위해 응시자들은 거리를 둬서 대기를 해야하는데 개발 직군 면접인 만큼
아래와 같은 규칙으로 대기실에 거리를 두고 앉도록 안내하고 있습니다.
- 대기실은 5개이며, 각 대기실은 5x5 크기입니다.
- 거리두기를 위하여 응시자들 끼리는 맨해튼 거리1가 2 이하로 앉지 말아 주세요.
- 단 응시자가 앉아있는 자리 사이가 파티션으로 막혀 있을 경우에는 허용합니다.
예를 들어,
위 그림처럼 자리 사이에 파티션이 존재한다면 맨해튼 거리가 2여도 거리두기를 지킨 것입니다.
위 그림처럼 파티션을 사이에 두고 앉은 경우도 거리두기를 지킨 것입니다.
위 그림처럼 자리 사이가 맨해튼 거리 2이고 사이에 빈 테이블이 있는 경우는 거리두기를 지키지 않은 것입니다.
5개의 대기실을 본 죠르디는 각 대기실에서 응시자들이 거리두기를 잘 기키고 있는지 알고 싶어졌습니다. 자리에 앉아있는 응시자들의 정보와 대기실 구조를 대기실별로 담은 2차원 문자열 배열 places가 매개변수로 주어집니다. 각 대기실별로 거리두기를 지키고 있으면 1을, 한 명이라도 지키지 않고 있으면 0을 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
[제한사항]
- places의 행 길이(대기실 개수) = 5
- places의 각 행은 하나의 대기실 구조를 나타냅니다.
- places의 열 길이(대기실 세로 길이) = 5
- places의 원소는 P,O,X로 이루어진 문자열입니다.
- places 원소의 길이(대기실 가로 길이) = 5
- P는 응시자가 앉아있는 자리를 의미합니다.
- O는 빈 테이블을 의미합니다.
- X는 파티션을 의미합니다.
- 입력으로 주어지는 5개 대기실의 크기는 모두 5x5 입니다.
- return 값 형식
- 1차원 정수 배열에 5개의 원소를 담아서 return 합니다.
- places에 담겨 있는 5개 대기실의 순서대로, 거리두기 준수 여부를 차례대로 배열에 담습니다.
- 각 대기실 별로 모든 응시자가 거리두기를 지키고 있으면 1을, 한 명이라도 지키지 않고 있으면 0을 담습니다
두 테이블 T1, T2가 행렬 (r1, c1), (r2, c2)에 각각 위치하고 있다면, T1, T2 사이의 맨해튼 거리는 |r1 - r2| + |c1 - c2| 입니다.
# 함수화
def find_(ex, a):
check = 0
move = [(0,1), (1,0), (-1,0), (0,-1)]
for x in move:
if 0 <= a[0] + x[0] <= 4 and 0 <= a[1] + x[1] <= 4:
if ex[a[0] + x[0]][a[1] + x[1]] == 'X':
pass
elif ex[a[0] + x[0]][a[1] + x[1]] == 'P':
check += 1
break
elif ex[a[0] + x[0]][a[1] + x[1]] == 'O':
for y in move:
if 0 <= a[0] + x[0] + y[0] <= 4 and 0 <= a[1] + x[1]+ y[1] <= 4 and (x[0] + y[0]!= 0 or x[1]+ y[1]!=0):
if ex[a[0] + x[0] + y[0]][a[1] + x[1]+ y[1]] == 'P':
check += 1
break
return check
def solution(places):
answer = []
for line in places:
check = 0
p = [(i,j) for i in range(5) for j in range(5) if line[i][j] == 'P']
for a in p:
check += find_(line, a)
if check > 0:
break
if check:
answer.append(0)
else:
answer.append(1)
return answer
P 주변을 살펴 O 혹은 P를 찾고, 다시 O가 있었다면 주변의 P를 찾아보는 방법이다.
728x90
반응형
'프로그래머스 > 프로그래머스_lv2(Python)' 카테고리의 다른 글
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 124나라의 숫자 (0) | 2021.09.21 |
---|---|
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 후보키 (0) | 2021.09.21 |
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 조이스틱 (0) | 2021.09.18 |
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 짝지어 제거하기 (0) | 2021.09.18 |
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 게임 맵 최단거리 (0) | 2021.09.17 |