programmers - 거리두기확인하기
resilient
·2021. 7. 17. 13:13
728x90
반응형
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
- 이 문제는 카카오 2021 여름 인턴십 코딩테스트 2번 문제로 나왔더 문제인데, 당시에 풀다가 계속 100프로가 나오지않아서 결국엔 틀렸던 문제였다.
- 지금 풀어보니까 엄청 쉽다는 아니여도 충분히 풀 수 있었던 문제였는데 아쉽다. 그 사이에 실력이 늘었다고 좋게 생각해야겠다.
- 2중 for문으로 2차원 배열을 탐색하면서 만약에 P가 나오면, 그 오른쪽, 대각선 아래 왼쪽, 대각선 아래 오른쪽 배열만 확인해주면된다. 이유는 그 전에 이미 왼쪽이나 위쪽 배열을 탐색했기 때문이다.
- 경우의 수를 6개로 나눠서 문제를 풀었고, 생각보다 간단했다.
- validRange라는 함수를 만들어서 범위 안에 있는지만 간단하게 확인해주는 방식으로 구현했다.
def solution(places):
def validRange(x, y):
if 0 <= x < 5 and 0 <= y < 5:
return True
return False
answer = []
for room in places:
flag = 0
for i in range(5):
for j in range(5):
if room[i][j] == "P":
if validRange(i+1,j) and room[i+1][j] == "P":
flag = 1
if validRange(i+2,j) and room[i+2][j] == "P" and room[i+1][j] != "X":
flag = 1
if validRange(i,j+1) and room[i][j+1] == "P":
flag = 1
if validRange(i,j+2) and room[i][j+2] == "P" and room[i][j+1] != "X":
flag = 1
if validRange(i+1,j+1) and room[i+1][j+1] == "P" and (room[i+1][j] != "X" or room[i][j+1] != "X"):
flag = 1
if validRange(i+1,j-1) and room[i+1][j-1] == "P" and (room[i][j-1] != "X" or room[i+1][j] != "X"):
flag = 1
if flag == 0:
answer.append(1)
else:
answer.append(0)
return answer
반응형
'자료구조 & 알고리즘 > 프로그래머스(programmers)' 카테고리의 다른 글
[programmers] 멀리뛰기 (0) | 2021.07.29 |
---|---|
programmers - 순위 (0) | 2021.07.21 |
programmers - 행렬 테두리 회전하기 (0) | 2021.06.19 |
programmers - 더 맵게 (0) | 2021.06.01 |
programmers - 셔틀버스 (0) | 2021.05.29 |