Algorithm

프로그래머스 : 공원 산책

KJihun 2023. 6. 15. 17:47
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

// 초기 좌표
Label : for(int i=0; i<park.length; i++) {
    for(int j=0; j<park[i].length(); j++) {
        if(park[i].charAt(j) == 'S') {
            answer[0] = i;
            answer[1] = j;
            break Label;
        }
    }
}
    //오른쪽으로 이동
    for (int i = 0; i < routes.length; i++) {
    	//- 'O' == ASCII를 정수로 전환
        for (int j = 0; j < routes[i].charAt(2) - '0'; j++) {
            if (routes[i].charAt(0) == 'E') {
                if (answer[1] != park[answer[0]].length() - 1) {
                    if (park[answer[0]].charAt(answer[1] + 1) == 'X') {
                       break;
                    } else {
                        answer[1]++;
                    }
                } else {
                    break;
                }

위 코드를 세 번 더 반복해 상하좌우로 이동 가능하게 만들었다.

결과는

역시 실패했다. 실패한 원인을 찾아보니

 

주어진 방향으로 이동할 때 공원을 벗어나는지 확인합니다.

주어진 방향으로 이동 중 장애물을 만나는지 확인합니다.

위 두 가지중 어느 하나라도 해당된다면, 로봇 강아지는 해당 명령을 무시하고 다음 명령을 수행합니다.

 

라고 했다. 무의식적으로 길이 없다면 멈출 것이라고 생각했던 것 같다.

마음이 급해선지, 문제들을 풀려고 할 때 문제를 잘 읽지 않게 되는 경향이 있는 것 같다.

아래는 해결한 코드이다.

 


for (int i = 0; i < routes.length; i++) {
    char direction = routes[i].charAt(0);       // 방향
    int distance = routes[i].charAt(2) - '0';   // 이동 거리
    boolean oxCheck = false;					// 장애물 X가 존재하면 true

	//오른쪽으로 이동
	if (direction == 'E') {
    //현재위치 + 이동거리가 공원의 크기보다 크면 continue;
        if (answer[1] + distance > park[answer[0]].length() - 1) {
        continue;
        } else {
            for (int j = answer[1] + 1; j <= answer[1] + distance; j++) {
            char ox = park[answer[0]].charAt(j);
                if (ox == 'X') {
                    oxCheck = true;
                    break;
                    }
                }
            }
            //X가 없었다면 거리 추가
            if (!oxCheck) {
                answer[1] += distance;
            }

처음 구현할 땐 변수명도 따로 지정해주지 않아서 코드를 작성할 때 명칭이 매우 헷갈렸기에

헷갈렸던 명칭들을 변수명으로 사용하여 구현하였다. 생각보다 편했고 금방 끝낼 수 있었다.

 

 

오늘도 문제를 풀어보며 알게 된 점은

 

1. 문제를 꼼꼼히 읽지 않고 문제를 푼다

2. 변수명을 사용하면 직관적이고 이해 가기 쉽다

 

문제를 잘 읽고 풀어야지 매번 다짐은 하지만 쉽게 고쳐지지 않는 것 같다.

앞으로는 어떤 기능을 구현해야 하는지 이해했더라도 상세조건 등 문제를 더욱 세세히 읽어볼 수 있도록 노력하며

자주 사용되는 변수는 변수명을 사용하여 헷갈리지 않게, 시간을 단축시킬 수 있도록 작성해야겠다.