문제
https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 이해 & 풀이
문제 이해
중요 포인트 1.
이 문제의 가장 큰 키포인트는 우리가 흔히 알고있는 (x,y) 의 기준이 아닌 (세로, 가로) 가 되는것이 중요하다. 그래서 평소의 x값과 y값을 기준으로 고민하면 범위오류가 계속해서 발생할 것이다.
필자는 이걸로 시간을 한참 썼다...
중요 포인트 2.
가는 방향은 점프하는것이 아닌 한칸씩 가는것이 중요하다. 가는 길에 X를 만나면 거기서 멈추는것이 아닌 그 행위를 하기 이전의 위치로 다시 돌아오는것이 중요하다.
첫번째 조건(park) : 전체적인 맵을 그려준다.
두번째 조건(routes) : 어느 방향으로 얼마나 움직일지 만들어준다.
문제 풀이
차례로 하나씩 만들어 나가 보자
1. 나아가는 방향의 이름과 어디로 갈지 정해주기
이렇게 각 방향에 따른 나아갈 방향을 정해주는데 위에서 말했듯이 (x, y) 가 아닌 (세로, 가로)의 방향을 기준으로 만들어 준다.
2. 첫번째 조건에 있는 내용들을 큰 배열에 하나씩 저장해준다.
이렇게 큰 도화지를 그리고 각각의 String 값을 하나하나씩 넣어주면서 큰 도화지에 배열을 작성해주고 그리는 김에 시작지점을 뜻하는 S를 찾아 해당 위치를 저장해두면 더욱 좋다
3. 두번째 조건인 어디로 나아갈지의 방향과 몇 칸을 갈것인가를 확인해야 한다
해당 조건을 split 을 통해 잘라 temp라는 작은 배열에 저장한후 앞자리에있는 방향을 map에서 꺼내서 어느 방향으로 갈지 만들어준다.
4. 위에서 사용한 move 메소드 만들어주기
이 메소드는 한칸한칸 앞으로 가며 혹시 도화지 크기를 벗어나거나 X를 만났을 경우를 대비하여 만들어진 메소드이다. 이것은 파라미터로 도화지, 시작점, 어디로 가는지 몇번 갈것인지를 받아 진행한다. 마지막을 보면 알수 있겠지만 다시 move 함수를 또다시 불러오는 재귀함수이다. 또 다시 move 를 부를때 횟수가 차감되는데 횟수가 0이되면 정답에 사용항 startX와 startY 가 입력되게 되며 만약 잘못되었다면 애초에 입력이 되지 않으면서 다시 리셋되는것을 뜻한다.
이후 결과값인 startX 와 startY를 answer[0]과answer[1]에 입히며 끝이 난다.
전체 소스 코드
'코딩테스트 > 🧮 프로그래머스' 카테고리의 다른 글
🧮 [프로그래머스] 예산(JAVA) (0) | 2023.08.06 |
---|---|
🧮 [프로그래머스] 같은 숫자는 싫어(JAVA) (0) | 2023.08.06 |
🧮 [프로그래머스] 달리기 경주 (0) | 2023.08.04 |
🧮 없는 숫자 더하기 (0) | 2023.08.04 |
🧮 제곱수 판별하기(Math.sqrt) (0) | 2023.08.02 |