여기서 기억해야 할 테크닉은
found 변수를 이용해서
for else를 구현한 것.
/*
상태변환
1. 임의로 0과 1 두 개를 선택해서 서로 위치를 교환.
2. 임의로 0또는 1 한개를 선택해 뒤집는다.
예시.
11000111. 목표 11100110
3번째 0과 8번째 1을 서로 바꾸면 1번만에 목표 달성.
최소횟수 구하기.
11000111 -> 11111110.
1. 3번째와 8번째 교환. +1
2. 4번째 1로 바꿈 +1
3. 5번째 1로 바꿈 +1
4. 정답 3.
풀이.
목표 문자열을 한 배열에 저장해놓고.
시작배열의 요소 1개씩 비교하면서 다르다면 반복문을 통해 다른 것과 교환한다.
끝났으면 또 다음 요소를 1개씩 비교하면서 나간다. 만약 또 다르다면
*/
// console.log()
function solution(data) {
let tmp = "";
let cnt = 0;
let found = false;
let datas = data.split(" ");
// datas = datas.map(el => {
// return el.split('')
// });
let base = datas[0].split("");
let goal = datas[1].split("");
for (let i = 0; i < base.length; i++) {
if (base[i] === goal[i]) {
// 동일할 때
continue;
} else {
// 다를 때
console.log(`다릅니다! 이번에 다른 것은 ${base[i]}, ${goal[i]} 입니다.`);
for (let j = i + 1; j < base.length; j++) {
console.log(`이번에 알아볼 것은 ${base[j]} 와 ${goal[j]} 입니다!!`);
if (base[j] !== goal[j] && base[i] !== base[j]) {
tmp = base[i];
base[i] = base[j];
base[j] = tmp;
cnt += 1;
found = true;
console.log(`${i}자리와 ${j}자리 교체합니다.`);
console.log(`결과는 ${base}, ${goal} 입니다.`);
break;
}
}
if (!found) {
base[i] === "0" ? (base[i] = "1") : (base[i] = "0");
cnt += 1;
console.log("답이 없습니다. 번호 바꿉니다.");
}
}
}
return cnt;
}
console.log(solution("11011 10010"));
'Algorithm > plz Remember' 카테고리의 다른 글
앞으로의 계획 정리 (0) | 2021.06.27 |
---|---|
모든 알고리즘 계산은 velog에서 한다. (0) | 2021.05.17 |
계획 (0) | 2021.05.17 |
댓글