728x90
▶문제 : 코딩테스트 연습 - 공원 산책 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
▶코드 작성
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
int *solution(const char *park[], size_t park_len, const char *routes[], size_t routes_len) {
int *answer = (int *)malloc(sizeof(int) * 2);
int width = strlen(park[0]);
int height = park_len;
int px, py;
bool pass = false;
for (int y = 0; y < height && !pass; y++) {//'S' 위치 찾기
for (int x = 0; x < width; x++) {
if (park[y][x] == 'S') {
px = x;
py = y;
pass = true;
break;
}
}
}
int x, y;
for (int i = 0; i < routes_len; i++) {
pass = true;
switch (routes[i][0]) {
case 'E':
for (x = 1; x <= routes[i][2] - '0'; x++) {//거리만큼 반복
if (park[py][px + x] == 'X' || px + x == width) {
//'X'가 있거나 공원을 벗어난다면 종료
pass = false;
break;
}
}
if (pass) px = px + x - 1;//정상적인 길이라면 대입
break;
case 'W':
for (x = 1; x <= routes[i][2] - '0'; x++) {//'E'와 동일
if (park[py][px - x] == 'X' || px - x < 0) {
pass = false;
break;
}
}
if (pass) px = px - x + 1;
break;
case 'S':
for (y = 1; y <= routes[i][2] - '0'; y++) {//'E'와 동일
if (park[py + y][px] == 'X' || py + y == height) {
pass = false;
break;
}
}
if (pass) py = py + y - 1;
break;
case 'N':
for (y = 1; y <= routes[i][2] - '0'; y++) {//'E'와 동일
if (park[py - y][px] == 'X' || py - y < 0) {
pass = false;
break;
}
}
if (pass) py = py - y + 1;
break;
}
}
answer[0] = py;
answer[1] = px;
return answer;
}
▶해석
'S'의 위치부터 파악한 뒤 routes 배열을 반복하여 움직였다.
'동서남북' 각각 switch로 나누어 routes배열에 적힌 거리만큼 반복하여
한 칸씩 park배열을 탐색하면서 'X'인지, 공원을 벗어나는지 확인하였다.
정상적으로 이동했다면 pass는 true이므로 'S'의 위치(px, py)에서 알맞게 이동하였다.
728x90
'프로그래머스 > C' 카테고리의 다른 글
프로그래머스 Level 2 : 혼자서 하는 틱택토 C언어 (0) | 2023.05.08 |
---|---|
프로그래머스 Level 1 : 덧칠하기 C언어 (0) | 2023.05.01 |
프로그래머스 Level 1 : 문자열 나누기 C언어 (0) | 2023.04.30 |
프로그래머스 Level 1 : 바탕화면 정리 C언어 (0) | 2023.03.13 |
프로그래머스 Level 2 : 택배 배달과 수거하기 C언어 (0) | 2023.01.16 |
댓글