728x90
▶문제 : 코딩테스트 연습 - 거리두기 확인하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
▶코드 작성
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// places_rows는 2차원 배열 places의 행 길이, places_cols는 2차원 배열 places의 열 길이입니다.
int *solution(const char ***places, size_t places_rows, size_t places_cols) {
int *answer = (int *)malloc(5 * sizeof(int));
char **room;//대기실
bool t;//거리두기 지킴 : true , 거리두기 지키지 않음 : false
for (int i = 0; i < 5; i++) {
room = places[i];//대기실 하나씩 확인
t = true;
for (int j = 0; j < 5 && t == true; j++) {
for (int l = 0; l < 5 && t == true; l++) {
if (room[j][l] == 'P') {//사람을 발견했다면
if (l <= 3 && room[j][l + 1] != 'X') {//오른쪽이 막히지 않았을 때
if (room[j][l + 1] == 'P' || l <= 2 && room[j][l + 2] == 'P' || j <= 3 && room[j + 1][l + 1] == 'P' || j >= 1 && room[j - 1][l + 1] == 'P') {
//오른쪽에 사람이 있다면 || 오른쪽옆에 사람이 있다면 || 오른대각선 아래에 사람이 있다면 || 오른대각선 위에 사람이 있다면
t = false;
break;
}
}
if (j <= 3 && room[j + 1][l] != 'X') {//아래쪽이 막히지 않았을 때
if (room[j + 1][l] == 'P' || j <= 2 && room[j + 2][l] == 'P' || l <= 3 && room[j + 1][l + 1] == 'P') {
//아래에 사람이 있다면 || 아래아래에 사람이 있다면 || 오른대각선 아래에 사람이 있다면
t = false;
break;
}
}
if (l >= 1 && j <= 3 && room[j][l - 1] != 'X' && room[j + 1][l - 1] == 'P') {
//왼쪽이 막히지 않고 왼대각선 아래에 사람이 있다면
t = false;
break;
}
l++;//오른쪽을 확인했으므로 한칸 더 옮겨도 무관함
}
}
}
if (t == true) answer[i] = 1;
else answer[i] = 0;
}
return answer;
}
▶해석
다양한 상황에 따라 통과 유무가 갈려서 이건 for문으로 전체 탐색을 하여 if문으로 잡아내야겠다는 생각을 하였다.
for문으로 사람을 찾고, 그 사람을 중심으로 오른쪽, 아래쪽, 왼쪽 순으로 모든 경우의 수를 조건에 넣었다.
if문이 끝나면 l++ 가 실행되는데 오른쪽은 검사를 했으므로 넘어가도 되기에 빠르게 다음으로 넘어갔다.
(if문 세가지 중 마지막 if문을 찾는 데까지 오래 걸렸다. for문으로 찾는 방향이 오른쪽으로 가면서 점차 아래로 향하므로 오른쪽과 아래를 중점으로 조건문을 세웠지만 OP, XP라는 예외상황이 있었다. 오른쪽은 가지 못하고 아래쪽은 X로 막혀있어 이 부분을 잡아내지 못하였다.)
728x90
'프로그래머스 > C' 카테고리의 다른 글
프로그래머스 Level 2 : 쿼드압축 후 개수 세기 C언어 (0) | 2022.07.24 |
---|---|
프로그래머스 Level 2 : 교점에 별 만들기 C언어 (0) | 2022.07.23 |
프로그래머스 Level 2 : k진수에서 소수 개수 구하기 C언어 (0) | 2022.07.06 |
프로그래머스 Level 2 : 방문 길이 C언어 (0) | 2022.07.03 |
프로그래머스 Level 2 : 주차 요금 계산 C언어 (0) | 2022.07.02 |
댓글