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. 변수명을 사용하면 직관적이고 이해 가기 쉽다
문제를 잘 읽고 풀어야지 매번 다짐은 하지만 쉽게 고쳐지지 않는 것 같다.
앞으로는 어떤 기능을 구현해야 하는지 이해했더라도 상세조건 등 문제를 더욱 세세히 읽어볼 수 있도록 노력하며
자주 사용되는 변수는 변수명을 사용하여 헷갈리지 않게, 시간을 단축시킬 수 있도록 작성해야겠다.
'Algorithm' 카테고리의 다른 글
프로그래머스 : 실패율 (42889) (0) | 2023.06.20 |
---|---|
프로그래머스 : 신규 아이디 추천 (72410) (0) | 2023.06.19 |
프로그래머스 : 문자열 내 마음대로 정렬하기 (12915) (0) | 2023.06.18 |
프로그래머스 : 완주하지 못한 선수 (42576) (0) | 2023.06.16 |
프로그래머스 : 달리기 경주 (0) | 2023.06.14 |