- 10*10 칸 배열을 만들고, 그 배열에 간 방향을 입력해서 중복을 파악하려고 했다.
- 10 * 10칸 빈배열 만들기
- dirs를 쪼개고 아래와 같이 확인
-> U,D,R,L 을 중에 좌표 밖으로 가지 않는다면
-> 배열에 이 값이 있는지 체크
-> 없다면 처음 간 길이므로 answer++
-> 그 후에 location 변화
function solution(dirs) {
var answer = 0;
// 10 * 10칸 좌표에서 각각 어디 갔는지 방향을 담을 배열 생성
var coord = new Array(11);
for(var i = 0;i<10;i++){
coord[i] = new Array(11).fill([]);
}
//첫 스타트는 정중앙
var location = [5,5];
//"ULURRDLLU"
//dirs한개씩 배열로 쪼개기 -> U L U R R D L L U
dirs = dirs.split("");
dirs.forEach((element) => {
if(element==='U'){
if(location[1]<10){
if(coord[location[0]][location[1]].indexOf('U')===-1){
coord[location[0]][location[1]].push('U');
answer++
}
location[1] +=1;
}
}
else if(element ==='D'){
if(location[1]>0){
if(coord[location[0]][location[1]].indexOf('D')===-1){
coord[location[0]][location[1]].push('D');
answer++
}
location[1] -=1;
}
}
else if(element ==='R'){
if(location[0]<10){
if(coord[location[0]][location[1]].indexOf('R')===-1){
coord[location[0]][location[1]].push('R');
answer++
}
location[0] +=1;
}
}
else if(element ==='L'){
if(location[0]>0){
if(coord[loxcation[0]][location[1]].indexOf('L')===-1){
coord[location[0]][location[1]].push('L');
answer++
}
location[0] -=1;
}
}
});
return answer;
}
왜 틀렸을까... 콘솔을 찍어보자.
배열을 찍어보니 하나의 배열이 변하는게 아니라, 그 줄 전체가 push되었다.... 이 이유를 몰라, 다른 방식으로 해보려 한다.
우선 틀린 부분은 위에 부분 말고도 더 있었다. 양방향 문제이다. A->B, B->A로 가는 것이 같기 때문이다. 따라서 위에 설계한대로 잘 돌아갔어도 틀렸다. 이를 위해선 양방향 부분도 고려하는 설계가 필요하다.
- Set함수 사용 -> 중복을 알아서 제거하기 위함
- dirs의 각각 값마다 아래를 수행
만약 00-> 01 로 갔다면 => set.add(0001), set.add(0100)을 두개 추가하는 식으로 진행- 추가하고 location변화
- 마지막에 양방향 부분을 고려하여 set의 길이를 2로 나누어 이를 리턴.
function solution(dirs) {
//중복을 제거하기 위해, Set사용
var set = new Set();
var location = [0,0];
dirs = dirs.split("");
var plus;
dirs.forEach((element)=>{
// 00 -> 11 = 0011푸쉬
if(element==='U'&&location[1]<5){
plus = ""+location[0] + location[1] + location[0] + (location[1]+1);
set.add(plus);
plus = "" + location[0] + (location[1]+1)+location[0] + location[1];
set.add(plus);
location[1]++;
}
else if(element ==='D'&&location[1]>-5){
plus = ""+location[0] + location[1] + location[0] + (location[1]-1);
set.add(plus);
plus = ""+ location[0] + (location[1]-1)+location[0] + location[1];
set.add(plus);
location[1]--;
}
else if(element ==='R'&&location[0]<5){
plus = ""+location[0] + location[1] + (location[0]+1) + location[1];
set.add(plus);
plus = "" + (location[0]+1) + location[1]+location[0] + location[1];
set.add(plus);
location[0]++;
}
else if(element ==='L'&&location[0]>-5){
plus = ""+location[0] + location[1] + (location[0]-1) + location[1];
set.add(plus);
plus = ""+ (location[0]-1) + location[1]+location[0] + location[1];
set.add(plus);
location[0]--;
}
})
return set.size/2;
}