티스토리 뷰
728x90
1. 이 문제는 사실 기술적인 부분이 하나도 없다. 알고리즘을 몰라도 구현 가능한 문제이다.
2. 그런데 웃긴 건 아직도 이 문제의 해답을 이해하지 못하겠다는 점이다.
3. 문제의 핵심은 이 로봇이 벋어나지 못하는 경로를 계속해서 돌게 되는지 여부인데 이 조건에 대해서 이해 할 수가 없다.
4. 조건은 로봇에게 지시문이 주어지는데 이것을 무한히 반복하여 동작하게 된다. 그런데 로봇에 벗어나지 못할 경로에 있는지 여부는 현재 출발지에 있는지, 방향이 바뀌었는지 2 가지로 판단한다.
4-1 출발지로 다시 돌아왔다는 것은 당연히 반복을 하면 계속 출발지로 돌아온다는 의미이기 때문에 이해가 된다.
4-2 그런데 방향이 달라지는 경우에도 벗어나지 못할 경로에 존재한다는 내용은 이해하기 힘들다.
5. 아무튼 20분 정도 고민해서 만든 코드는 아래와 같다.
/**
* @param {string} instructions
* @return {boolean}
*/
var isRobotBounded = function(instructions) {
const robot = new Robot();
return robot.run(instructions);
};
class Robot {
constructor() {
this.heading = ['N', 'E', 'S', 'W'];
this.directions = {
'N': [0, 1],
'S': [0,-1],
'E': [1, 0],
'W': [-1, 0]
};
this.position = [0, 0];
this.headingIndex = 0;
}
run(instructions) {
for (const ch of instructions) {
this.setHeading(ch);
if (ch === 'G') {
this.position[0] += this.directions[this.heading[this.headingIndex]][0];
this.position[1] += this.directions[this.heading[this.headingIndex]][1];
}
}
if ((this.position[0] === 0 && this.position[1] === 0) ||
this.headingIndex !== 0) {
return true;
}
return false;
}
setHeading(inst) {
if (inst === 'L') {
this.headingIndex = this.headingIndex-1 < 0 ?
this.heading.length + this.headingIndex - 1 : this.headingIndex - 1;
return;
}
if (inst === 'R') {
this.headingIndex = this.headingIndex+1 >= this.heading.length ?
(this.headingIndex+1)%this.heading.length : this.headingIndex + 1;
return;
}
}
}
728x90
'Basic > Algorithms' 카테고리의 다른 글
Binary Tree에서 같은 숫자로만 구성된 subtree개수 구하기 (0) | 2023.03.08 |
---|---|
PreOrder + InOrder or PostOrder + InOrder로 Binary Tree 만들기 (0) | 2023.03.08 |
Questions : Partition Labels (0) | 2020.07.25 |
Questions : Reorder Data in Log Files (0) | 2020.07.25 |
Questions : Number of Islands (0) | 2020.07.25 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
TAG
- one-to-many
- spring boot
- 스프링
- Angular
- Many-To-Many
- Rest
- 설정하기
- crud
- one-to-one
- 설정
- mapping
- 상속
- XML
- 하이버네이트
- 로그인
- RestTemplate
- form
- 외부파일
- 매핑
- 스프링부트
- Spring Security
- hibernate
- Validation
- jsp
- MYSQL
- WebMvc
- Security
- login
- 자바
- Spring
250x250